国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中Selenium庫使用教程詳解

Python中Selenium庫使用教程詳解

2020-07-24 00:12YJ.li Python

這篇文章主要介紹了Python中Selenium庫使用教程詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

selenium介紹

selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器

中文參考文檔

官網

環境安裝

下載安裝selenium

?
1
pip install selenium -i https://mirrors.aliyun.com/pypi/simple/

谷歌瀏覽器驅動程序下載地址:

http://chromedriver.storage.googleapis.com/index.html

使用示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from selenium import webdriver
from time import sleep
 
# 實例化一款瀏覽器
bor = webdriver.Chrome(executable_path='chromedriver.exe')
 
# 對指定的url發起請求
bor.get('https://www.jd.com/')
sleep(1)
# 進行標簽定位
search_input = bor.find_element_by_id('key')
 
# 向搜索框中錄入關鍵詞
search_input.send_keys("mac pro")
 
# 點擊搜索按鈕
btn = bor.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
btn.click()
sleep(2)
 
# 執行js,讓滾輪向下滾動
bor.execute_script('window.scrollTo(0, document.body.scrollHeight)')
sleep(2)
 
page_text = bor.page_source
 
print(page_text)
 
bor.quit()

瀏覽器創建

Selenium支持非常多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機端的瀏覽器。另外,也支持無界面瀏覽器PhantomJS。

?
1
2
3
4
5
6
7
from selenium import webdriver
 
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

元素定位

webdriver 提供了一系列的元素定位方法,常用的有以下幾種:

 

定位一個元素 定位多個元素 含義
find_element_by_id find_elements_by_id 通過元素id定位
find_element_by_name find_elements_by_name 通過元素name定位
find_element_by_xpath find_elements_by_xpath 通過xpath表達式定位
find_element_by_link_text find_elements_by_link_tex 通過完整超鏈接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通過部分鏈接定位
find_element_by_tag_name find_elements_by_tag_name 通過標簽定位
find_element_by_class_name find_elements_by_class_name 通過類名進行定位
find_elements_by_css_selector find_elements_by_css_selector 通過css選擇器進行定位

 

注意:

1、find_element_by_xxx找的是第一個符合條件的標簽,find_elements_by_xxx找的是所有符合條件的標簽。

2、根據ID、CSS選擇器和XPath獲取,它們返回的結果完全一致。

3、另外,Selenium還提供了通用方法find_element(),它需要傳入兩個參數:查找方式By和值。實際上,它就是find_element_by_id()這種方法的通用函數版本,比如find_element_by_id(id)就等價于find_element(By.ID, id),二者得到的結果完全一致。

實例演示

假如有一個web頁面,通過前端工具查看到一個元素的屬性是這樣的。

?
1
2
3
4
5
6
7
<html>
 <head>
 <body link="#0000cc">
 <a href="/" rel="external nofollow" onmousedown="return c({'fm':'tab','tab':'logo'})">
 <form name="f" action="/s">
  <span ></span>
  <input name="wd" value="" maxlength="255" autocomplete="off">

通過id定位:

?
1
dr.find_element_by_id("kw")

通過name定位:

?
1
dr.find_element_by_name("wd")

通過class name定位:

?
1
dr.find_element_by_class_name("s_ipt")

通過tag name定位:

?
1
dr.find_element_by_tag_name("input")

通過xpath定位,xpath定位有N種寫法,這里列幾個常用寫法:

?
1
2
3
4
5
6
7
dr.find_element_by_xpath("//*[@]")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@]")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@]/input")
dr.find_element_by_xpath("//form[@]/span/input")
dr.find_element_by_xpath("//input[@ and @name='wd']")

通過css定位,css定位有N種寫法,這里列幾個常用寫法:

?
1
2
3
4
5
6
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")

假如頁面上有如下一組文本鏈接

?
1
2
<a href="http://news.baidu.com" rel="external nofollow" name="tj_trnews">新聞</a>
<a href="http://www.hao123.com" rel="external nofollow" name="tj_trhao123">hao123</a>

通過link text定位:

?
1
2
dr.find_element_by_link_text("新聞")
dr.find_element_by_link_text("hao123")

通過partial link text定位:

?
1
2
3
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

控制瀏覽器

常用的控制瀏覽器操作的一些方法

方法 說明
set_window_size() 設置瀏覽器的大小
back() 控制瀏覽器后退
forward() 控制瀏覽器前進
refresh() 刷新當前頁面
clear() 清除文本
send_keys (value) 模擬按鍵輸入
click() 單擊元素
submit() 用于提交表單
get_attribute(name) 獲取元素屬性值
is_displayed() 設置該元素是否用戶可見
size 返回元素的尺寸
text 獲取元素的文本

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
 
from time import sleep
#1.創建Chrome瀏覽器對象,這會在電腦上在打開一個瀏覽器窗口
 
browser = webdriver.Chrome(executable_path= "chromedriver.exe")
 
#2.通過瀏覽器向服務器發送URL請求
browser.get("https://www.baidu.com/")
 
sleep(3)
 
#3.刷新瀏覽器
browser.refresh()
 
#4.設置瀏覽器的大小
browser.set_window_size(1400,800)
 
#5.設置鏈接內容
element=browser.find_element_by_link_text("新聞")
element.click()

調用JavaScript代碼

雖然WebDriver提供了操作瀏覽器的前進和后退方法,但對于瀏覽器滾動條并沒有提供相應的操作方法。在這種情況下,就可以借助JavaScript來控制瀏覽器的滾動條。WebDriver提供了execute_script()方法來執行JavaScript代碼。

用于調整瀏覽器滾動條位置的JavaScript代碼如下:

?
1
2
<!-- window.scrollTo(左邊距,上邊距); -->
window.scrollTo(0,450);
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from selenium import webdriver
from time import sleep
 
# 1.訪問百度
drive = webdriver.Chrome(executable_path='chromedriver.exe')
drive.get('https://www.baidu.com')
 
# 2.搜索
drive.find_element_by_id('kw').send_keys('python')
drive.find_element_by_id('su').click()
 
# 3.休眠2s,獲取服務器的響應內容
sleep(2)
 
# 4.通過javascript設置瀏覽器窗口的滾動條位置
drive.execute_script('window.scrollTo(0, 500)')
# drive.execute_script('window.scrollTo(0, document.body.scrollHeight)') #滑到最底部
 
sleep(2)
drive.close()

獲取頁面源碼數據

通過page_source屬性可以獲取網頁的源代碼,接著就可以使用解析庫(如正則表達式、Beautiful Soup、pyquery等)來提取信息了。

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
from time import sleep
 
# 1.訪問百度
drive = webdriver.Chrome(executable_path='chromedriver.exe')
drive.get('https://www.baidu.com')
 
# 2.搜索
drive.find_element_by_id('kw').send_keys('python')
drive.find_element_by_id('su').click()
 
# 3.休眠2s,獲取服務器的響應內容
sleep(2)
 
# 4.獲取頁面源碼數據
text = drive.page_source
print(text)
 
drive.close()

cookie操作

有時候我們需要驗證瀏覽器中cookie是否正確,因為基于真實cookie的測試是無法通過白盒和集成測試進行的。WebDriver提供了操作Cookie的相關方法,可以讀取、添加和刪除cookie信息。

WebDriver操作cookie的方法:

方法 說明
get_cookies() 獲得所有cookie信息
get_cookie(name) 返回字典的key為“name”的cookie信息
add_cookie(cookie_dict) 添加cookie。“cookie_dict”指字典對象,必須有name 和value 值
delete_cookie(name,optionsString) 刪除cookie信息。“name”是要刪除的cookie的名稱,“optionsString”是該cookie的選項,目前支持的選項包括“路徑”,“域”
delete_all_cookies() 刪除所有cookie信息

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from selenium import webdriver
drive = webdriver.Chrome(executable_path='chromedriver.exe')
drive.get('https://www.cnblogs.com/')
 
# 1.打印cookie信息
print(drive.get_cookies())
 
# 2.添加cookie信息
dic = {'name':'name', 'value':'python'}
drive.add_cookie(dic)
print(drive.get_cookies())
 
# 3.遍歷打印cookie信息
for cookie in drive.get_cookies():
 print(f"{cookie['name']}---f{cookie['value']}\n")
 
drive.close()

谷歌無頭瀏覽器

PhntomJs已停止維護更新,這里使用谷歌的無頭瀏覽器,是一款無界面的谷歌瀏覽器。很多時候我們爬取數據,并不想打開一個瀏覽器窗口進行操作,我們只需要獲取數據或者拿到cookie然后進行操作。

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
 
# 1.創建一個參數對象,用來控制chrome以無界面模式打開
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
 
# 2.創建瀏覽器對象
drive = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options)
 
# 3.發起請求獲取數據
drive.get('https://www.cnblogs.com/')
 
page_text = drive.page_source
print(page_text)
 
drive.close()

selenium規避被檢測識別

現在不少大網站有對selenium采取了監測機制。比如正常情況下我們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值為 undefined。而使用selenium訪問則該值為true。那么如何解決這個問題呢?

只需要設置Chromedriver的啟動參數即可解決問題。在啟動Chromedriver之前,為Chrome開啟實驗性功能參數excludeSwitches,它的值為['enable-automation'],完整代碼如下:

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
from selenium import webdriver
from selenium.webdriver import ChromeOptions
 
# 1.實例化一個ChromeOptions對象
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
 
# 2.將ChromeOptions實例化的對象option作為參數傳給Crhome對象
driver = webdriver.Chrome(executable_path='chromedriver.exe', options=option)
 
# 3.發起請求
driver.get('https://www.taobao.com/')

到此這篇關于Python中Selenium庫使用教程詳解的文章就介紹到這了,更多相關Python Selenium庫使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/yanjieli/archive/2020/07/23/13364615.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 综合在线视频 | 羞涩网站 | 久久久久久成人 | 久久av网| 亚洲第一免费看片 | 欧美午夜精品久久久久久人妖 | 国产精品一卡二卡三卡 | av在线入口| 精品视频在线免费观看 | 国产精品亚洲综合 | 成人国产电影 | 日韩极品在线 | 午夜视频福利在线观看 | 精品亚洲一区二区三区四区五区 | 精品一区二区三区免费毛片 | 久色网| 欧美一区免费 | 国产精品美乳在线观看 | www国产精品| 国内自拍视频在线观看 | 久久se精品一区精品二区 | 国产高清视频一区 | 精品性 | 免费www| 亚洲在线一区二区 | 精品一区二区三区在线视频 | 黄色免费视频 | 欧美一级网站 | 毛片黄片免费观看 | 日韩精品1区2区3区 国产日韩在线视频 | 国产高清视频在线 | 国产精品久久久久久久久久大牛 | 久草中文在线观看 | 日本免费在线 | www乱| 最好的2019中文大全在线观看 | 午夜影院在线观看 | 亚洲在线精品视频 | 日本久久免费 | 日日摸夜夜添夜夜添高潮视频 | 亚洲精品美女 |