欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中Selenium庫(kù)使用教程詳解

 更新時(shí)間:2020年07月23日 10:50:52   作者:YJ.li  
這篇文章主要介紹了Python中Selenium庫(kù)使用教程詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

selenium介紹

selenium最初是一個(gè)自動(dòng)化測(cè)試工具,而爬蟲中使用它主要是為了解決requests無(wú)法直接執(zhí)行JavaScript代碼的問(wèn)題 selenium本質(zhì)是通過(guò)驅(qū)動(dòng)瀏覽器,完全模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點(diǎn)擊、下拉等,來(lái)拿到網(wǎng)頁(yè)渲染之后的結(jié)果,可支持多種瀏覽器

中文參考文檔

官網(wǎng)

環(huán)境安裝

下載安裝selenium

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

谷歌瀏覽器驅(qū)動(dòng)程序下載地址:

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

使用示例

from selenium import webdriver
from time import sleep

# 實(shí)例化一款瀏覽器
bor = webdriver.Chrome(executable_path='chromedriver.exe')

# 對(duì)指定的url發(fā)起請(qǐng)求
bor.get('https://www.jd.com/')
sleep(1)
# 進(jìn)行標(biāo)簽定位
search_input = bor.find_element_by_id('key')

# 向搜索框中錄入關(guān)鍵詞
search_input.send_keys("mac pro")

# 點(diǎn)擊搜索按鈕
btn = bor.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
btn.click()
sleep(2)

# 執(zhí)行js,讓滾輪向下滾動(dòng)
bor.execute_script('window.scrollTo(0, document.body.scrollHeight)')
sleep(2)

page_text = bor.page_source

print(page_text)

bor.quit()

瀏覽器創(chuàng)建

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

from selenium import webdriver
 
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

元素定位

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

定位一個(gè)元素 定位多個(gè)元素 含義
find_element_by_id find_elements_by_id 通過(guò)元素id定位
find_element_by_name find_elements_by_name 通過(guò)元素name定位
find_element_by_xpath find_elements_by_xpath 通過(guò)xpath表達(dá)式定位
find_element_by_link_text find_elements_by_link_tex 通過(guò)完整超鏈接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通過(guò)部分鏈接定位
find_element_by_tag_name find_elements_by_tag_name 通過(guò)標(biāo)簽定位
find_element_by_class_name find_elements_by_class_name 通過(guò)類名進(jìn)行定位
find_elements_by_css_selector find_elements_by_css_selector 通過(guò)css選擇器進(jìn)行定位

注意:

1、find_element_by_xxx找的是第一個(gè)符合條件的標(biāo)簽,find_elements_by_xxx找的是所有符合條件的標(biāo)簽。

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

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

實(shí)例演示

假如有一個(gè)web頁(yè)面,通過(guò)前端工具查看到一個(gè)元素的屬性是這樣的。

<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">

通過(guò)id定位:

dr.find_element_by_id("kw")

通過(guò)name定位:

dr.find_element_by_name("wd")

通過(guò)class name定位:

dr.find_element_by_class_name("s_ipt")

通過(guò)tag name定位:

dr.find_element_by_tag_name("input")

通過(guò)xpath定位,xpath定位有N種寫法,這里列幾個(gè)常用寫法:

dr.find_element_by_xpath("http://*[@]")
dr.find_element_by_xpath("http://*[@name='wd']")
dr.find_element_by_xpath("http://input[@]")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("http://span[@]/input")
dr.find_element_by_xpath("http://form[@]/span/input")
dr.find_element_by_xpath("http://input[@ and @name='wd']")

通過(guò)css定位,css定位有N種寫法,這里列幾個(gè)常用寫法:

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")

假如頁(yè)面上有如下一組文本鏈接

<a  rel="external nofollow" name="tj_trnews">新聞</a>
<a  rel="external nofollow" name="tj_trhao123">hao123</a>

通過(guò)link text定位:

dr.find_element_by_link_text("新聞")
dr.find_element_by_link_text("hao123")

通過(guò)partial link text定位:

dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

控制瀏覽器

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

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

📝 示例

from selenium import webdriver

from time import sleep
#1.創(chuàng)建Chrome瀏覽器對(duì)象,這會(huì)在電腦上在打開一個(gè)瀏覽器窗口

browser = webdriver.Chrome(executable_path= "chromedriver.exe")

#2.通過(guò)瀏覽器向服務(wù)器發(fā)送URL請(qǐng)求
browser.get("https://www.baidu.com/")

sleep(3)

#3.刷新瀏覽器
browser.refresh()

#4.設(shè)置瀏覽器的大小
browser.set_window_size(1400,800)

#5.設(shè)置鏈接內(nèi)容
element=browser.find_element_by_link_text("新聞")
element.click()

調(diào)用JavaScript代碼

雖然WebDriver提供了操作瀏覽器的前進(jìn)和后退方法,但對(duì)于瀏覽器滾動(dòng)條并沒(méi)有提供相應(yīng)的操作方法。在這種情況下,就可以借助JavaScript來(lái)控制瀏覽器的滾動(dòng)條。WebDriver提供了execute_script()方法來(lái)執(zhí)行JavaScript代碼。

用于調(diào)整瀏覽器滾動(dòng)條位置的JavaScript代碼如下:

<!-- window.scrollTo(左邊距,上邊距); -->
window.scrollTo(0,450);
from selenium import webdriver
from time import sleep

# 1.訪問(wèn)百度
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,獲取服務(wù)器的響應(yīng)內(nèi)容
sleep(2)

# 4.通過(guò)javascript設(shè)置瀏覽器窗口的滾動(dòng)條位置
drive.execute_script('window.scrollTo(0, 500)')
# drive.execute_script('window.scrollTo(0, document.body.scrollHeight)') #滑到最底部

sleep(2)
drive.close()

獲取頁(yè)面源碼數(shù)據(jù)

通過(guò)page_source屬性可以獲取網(wǎng)頁(yè)的源代碼,接著就可以使用解析庫(kù)(如正則表達(dá)式、Beautiful Soup、pyquery等)來(lái)提取信息了。

📝 示例

from selenium import webdriver
from time import sleep

# 1.訪問(wèn)百度
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,獲取服務(wù)器的響應(yīng)內(nèi)容
sleep(2)

# 4.獲取頁(yè)面源碼數(shù)據(jù)
text = drive.page_source
print(text)

drive.close()

cookie操作

有時(shí)候我們需要驗(yàn)證瀏覽器中cookie是否正確,因?yàn)榛谡鎸?shí)cookie的測(cè)試是無(wú)法通過(guò)白盒和集成測(cè)試進(jìn)行的。WebDriver提供了操作Cookie的相關(guān)方法,可以讀取、添加和刪除cookie信息。

WebDriver操作cookie的方法:

方法 說(shuō)明
get_cookies() 獲得所有cookie信息
get_cookie(name) 返回字典的key為“name”的cookie信息
add_cookie(cookie_dict) 添加cookie?!癱ookie_dict”指字典對(duì)象,必須有name 和value 值
delete_cookie(name,optionsString) 刪除cookie信息?!皀ame”是要?jiǎng)h除的cookie的名稱,“optionsString”是該cookie的選項(xiàng),目前支持的選項(xiàng)包括“路徑”,“域”
delete_all_cookies() 刪除所有cookie信息

📝 示例

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()

谷歌無(wú)頭瀏覽器

PhantomJs已停止維護(hù)更新,這里使用谷歌的無(wú)頭瀏覽器,是一款無(wú)界面的谷歌瀏覽器。很多時(shí)候我們爬取數(shù)據(jù),并不想打開一個(gè)瀏覽器窗口進(jìn)行操作,我們只需要獲取數(shù)據(jù)或者拿到cookie然后進(jìn)行操作。

📝 示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 1.創(chuàng)建一個(gè)參數(shù)對(duì)象,用來(lái)控制chrome以無(wú)界面模式打開
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

# 2.創(chuàng)建瀏覽器對(duì)象
drive = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options)

# 3.發(fā)起請(qǐng)求獲取數(shù)據(jù)
drive.get('https://www.cnblogs.com/')

page_text = drive.page_source
print(page_text)

drive.close()

selenium規(guī)避被檢測(cè)識(shí)別

現(xiàn)在不少大網(wǎng)站有對(duì)selenium采取了監(jiān)測(cè)機(jī)制。比如正常情況下我們用瀏覽器訪問(wèn)淘寶等網(wǎng)站的 window.navigator.webdriver的值為 undefined。而使用selenium訪問(wèn)則該值為true。那么如何解決這個(gè)問(wèn)題呢?

只需要設(shè)置Chromedriver的啟動(dòng)參數(shù)即可解決問(wèn)題。在啟動(dòng)Chromedriver之前,為Chrome開啟實(shí)驗(yàn)性功能參數(shù)excludeSwitches,它的值為['enable-automation'],完整代碼如下:

📝 示例

from selenium import webdriver
from selenium.webdriver import ChromeOptions

# 1.實(shí)例化一個(gè)ChromeOptions對(duì)象
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])

# 2.將ChromeOptions實(shí)例化的對(duì)象option作為參數(shù)傳給Crhome對(duì)象
driver = webdriver.Chrome(executable_path='chromedriver.exe', options=option)

# 3.發(fā)起請(qǐng)求
driver.get('https://www.taobao.com/')

到此這篇關(guān)于Python中Selenium庫(kù)使用教程詳解的文章就介紹到這了,更多相關(guān)Python Selenium庫(kù)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用gRPC實(shí)現(xiàn)數(shù)據(jù)分析能力的共享

    Python使用gRPC實(shí)現(xiàn)數(shù)據(jù)分析能力的共享

    gRPC是一個(gè)高性能、開源、通用的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架,由Google推出,本文主要介紹了Python如何使用gRPC實(shí)現(xiàn)數(shù)據(jù)分析能力的共享,感興趣的可以了解下
    2024-02-02
  • 詳解pandas數(shù)據(jù)合并與重塑(pd.concat篇)

    詳解pandas數(shù)據(jù)合并與重塑(pd.concat篇)

    這篇文章主要介紹了詳解pandas數(shù)據(jù)合并與重塑(pd.concat篇),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python實(shí)現(xiàn)隨機(jī)游走的詳細(xì)解釋

    Python實(shí)現(xiàn)隨機(jī)游走的詳細(xì)解釋

    這篇文章主要介紹了Python實(shí)現(xiàn)隨機(jī)游走的詳細(xì)解釋,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 將Python代碼打包為jar軟件的簡(jiǎn)單方法

    將Python代碼打包為jar軟件的簡(jiǎn)單方法

    這篇文章主要介紹了將Python代碼打包為jar軟件的簡(jiǎn)單方法,一些情況下會(huì)有利于Python和Java項(xiàng)目之間的協(xié)作,需要的朋友可以參考下
    2015-08-08
  • Python常用的內(nèi)置序列結(jié)構(gòu)(列表、元組、字典)學(xué)習(xí)筆記

    Python常用的內(nèi)置序列結(jié)構(gòu)(列表、元組、字典)學(xué)習(xí)筆記

    序列指元素排成一列的數(shù)據(jù)結(jié)構(gòu),Python中有l(wèi)ist列表而沒(méi)有默認(rèn)內(nèi)置array數(shù)組,以下我們來(lái)整理一下Python常用的內(nèi)置序列結(jié)構(gòu)(列表、元組、字典)學(xué)習(xí)筆記
    2016-07-07
  • Django ORM filter() 的運(yùn)用詳解

    Django ORM filter() 的運(yùn)用詳解

    這篇文章主要介紹了Django ORM filter() 的運(yùn)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python如何制作縮略圖

    python如何制作縮略圖

    python如何制作縮略圖?這篇文章主要為大家詳細(xì)介紹了python制作縮略圖的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python中的map、reduce和filter淺析

    Python中的map、reduce和filter淺析

    這篇文章主要介紹了Python中的map、reduce和filter,用實(shí)例來(lái)理解這3個(gè)函數(shù),需要的朋友可以參考下
    2014-04-04
  • 深度理解Python中Class類、Object類、Type元類

    深度理解Python中Class類、Object類、Type元類

    本文主要介紹了深度理解Python中Class類、Object類、Type元類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • PyQt 圖解Qt Designer工具的使用方法

    PyQt 圖解Qt Designer工具的使用方法

    這篇文章主要介紹了PyQt 圖解Qt Designer工具的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論