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

python+selenium使用xpath定位的問(wèn)題及解決

 更新時(shí)間:2024年05月16日 14:39:32   作者:wuXu_0720  
這篇文章主要介紹了python+selenium使用xpath定位的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python用selenium調(diào)chrome爬取網(wǎng)頁(yè)信息遇到報(bào)錯(cuò)

1.InvalidSelectorException: Message: invalid selector: The result of the xpath expression is [object Attr]. It should be an element

原因是selenium不支持從xpath中直接獲取text文本信息。

name=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2/text()")
website=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/a[3]/@href")

xpath表達(dá)式修改為:

name=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2/text()")
website=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/a[3]/@href")

2.Message: no such element: Unable to locate element:

xpath表達(dá)式一直無(wú)法準(zhǔn)確定位,原因是通過(guò)瀏覽器開(kāi)發(fā)者工具copy的xpath表達(dá)式和實(shí)際selenium獲取的網(wǎng)頁(yè)資源不同,表達(dá)式錯(cuò)誤無(wú)法定位。(經(jīng)對(duì)比發(fā)現(xiàn)是selenium有一個(gè)需用戶(hù)同意的cookie彈窗)

通過(guò)print(web.page_source)拿到selenium獲取的網(wǎng)頁(yè)資源,發(fā)現(xiàn)有一個(gè)div未加載出來(lái)。

其實(shí)應(yīng)該是body下第2個(gè)div。

通過(guò)開(kāi)發(fā)者工具重新獲得準(zhǔn)確的xpath表達(dá)式。

原xpath表達(dá)式:

title = web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2").text

改為正確的xpath表達(dá)式:

title = web.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/h2").text

3.使用發(fā)現(xiàn)selenium效率過(guò)低,一個(gè)網(wǎng)頁(yè)全部加載完畢要1分鐘左右。

解決辦法是設(shè)置最長(zhǎng)加載時(shí)長(zhǎng),超過(guò)時(shí)長(zhǎng)則停止加載,開(kāi)始定位數(shù)據(jù)。

from selenium.common.exceptions import TimeoutException
 
web = webdriver.Chrome()
web.set_page_load_timeout(10)#設(shè)置頁(yè)面加載時(shí)長(zhǎng)
web.set_script_timeout(10)#設(shè)置JS加載時(shí)長(zhǎng)
 
try:
	web.get(str(url))
except TimeoutException: #加載超時(shí)異常處理
	web.execute_script('window.stop()')  

python selenium xpath高級(jí)定位用法

目前很多網(wǎng)頁(yè)前端代碼是框架或 JS 生成的,就導(dǎo)致了混亂而難以定位。

為了快速而又復(fù)雜定位 Selenium 中有一個(gè) Xpath 選擇器,可以選擇復(fù)雜的頁(yè)面定位,也是爬蟲(chóng)在網(wǎng)頁(yè)定位中的較優(yōu)的選擇。

1、通過(guò)絕對(duì)路徑定位元素

driver.find_element_by_xpath("html/body/div/form/input")

2、通過(guò)相對(duì)路徑定位元素

driver.find_element_by_xpath("http://input")

3、使用索引定位元素

driver.find_element_by_xpath("http://input[1]")

4、使用XPATH的屬性值定位元素

driver.find_element_by_xpath("http://input[@id='username']")
driver.find_element_by_xpath("http://input[@type='submit'][@name='sub1']")
driver.find_element_by_xpath("http://input[@type='submit' and @name='sub1']")
driver.find_element_by_xpath("http://input[@type='submit' or @name='sub1']")

5、使用XPATH的屬性名稱(chēng)定位元素

# 查找所有input標(biāo)簽中含有type屬性的元素
driver.find_element_by_xpath("http://input[@type]")
 
# 查找所有a標(biāo)簽中含有onclick屬性的元素
driver.find_element_by_xpath("http://a[@onclick]")
 
.....

6、使用任意值來(lái)匹配屬性及元素

# 匹配所有input元素中含有屬性的值為readonly的元素
driver.find_element_by_xpath("http://input[@*='readonly']"))

7、使用模糊的屬性值匹配

  • starts-with():匹配一個(gè)屬性開(kāi)始位置的關(guān)鍵字,是模糊定位的一種。
# 匹配id以submit開(kāi)頭的元素,如:id='submit'
driver.find_element_by_xpath("http://input[start-with(@id,'submit')]")
  • ends-with():匹配一個(gè)屬性結(jié)束位置的關(guān)鍵字,是模糊定位的一種。
# 匹配id以submit結(jié)尾的元素,如:id='submit'
driver.find_element_by_xpath("http://input[ends-with(@id,'submit')]")
contains():匹配一個(gè)屬性值中包含的字符串,也是模糊定位的一種。

# 匹配id中含有submit的元素,如:id='submit'
driver.find_element_by_xpath("http://input[contains(@id,'submit')]")
 
# 匹配name屬性中包含na關(guān)鍵字的頁(yè)面元素
driver.find_element_by_xpath("http://input[contains(@name,'na')]")
text():根據(jù)文本信息匹配元素位置。

# 如:<a  rel="external nofollow" >百度搜索</a>
driver.find_element_by_xpath("http://a[text()='百度搜索'] ")
driver.find_element_by_xpath("http://a[contains(text(),"百度搜索")]")
last():函數(shù)位置定位。

# 表示div元素->form元素->input元素的最后一個(gè)子元素,得到id值為e2的E元素
driver.find_element_by_xpath("/div/form/input[last()]")

8、過(guò)慮某個(gè)元素

  • name():獲取標(biāo)簽名稱(chēng)。
# 表示過(guò)慮掉在 div id='query_reulst_box' 的下的 style 標(biāo)簽和 meta 標(biāo)簽
driver.find_element_by_xpath("http://div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text())

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python讀取系統(tǒng)文件夾內(nèi)所有文件并統(tǒng)計(jì)數(shù)量的方法

    Python讀取系統(tǒng)文件夾內(nèi)所有文件并統(tǒng)計(jì)數(shù)量的方法

    今天小編就為大家分享一篇Python讀取系統(tǒng)文件夾內(nèi)所有文件并統(tǒng)計(jì)數(shù)量的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python中命名元組Namedtuple的使用詳解

    Python中命名元組Namedtuple的使用詳解

    Python支持一種名為“namedtuple()”的容器字典,它存在于模塊“collections”中,下面就跟隨小編一起學(xué)習(xí)一下Namedtuple的具體使用吧
    2023-09-09
  • tkinter如何獲取復(fù)選框(Checkbutton)的值

    tkinter如何獲取復(fù)選框(Checkbutton)的值

    這篇文章主要介紹了tkinter如何獲取復(fù)選框(Checkbutton)的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python繪制交通流折線圖詳情

    Python繪制交通流折線圖詳情

    這篇文章主要介紹了Python繪制交通流折線圖詳情,文章基于python的相關(guān)資料展開(kāi)折線圖繪制的實(shí)現(xiàn)流程,感興趣的小伙伴可以參考一下
    2022-06-06
  • python微信跳一跳游戲輔助代碼解析

    python微信跳一跳游戲輔助代碼解析

    本篇文章給大家詳細(xì)講解了用python寫(xiě)的一個(gè)微信跳一跳輔助腳本的源碼,對(duì)此有興趣的朋友參考下吧。
    2018-01-01
  • Python使用gensim計(jì)算文檔相似性

    Python使用gensim計(jì)算文檔相似性

    在文本處理中,比如商品評(píng)論挖掘,有時(shí)需要了解每個(gè)評(píng)論分別和商品的描述之間的相似度,以此衡量評(píng)論的客觀性。那么python 里面有計(jì)算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強(qiáng)大。下面我們就來(lái)體驗(yàn)下gensim的強(qiáng)大
    2016-04-04
  • 如何將Python徹底卸載的三種方法

    如何將Python徹底卸載的三種方法

    通常我們?cè)谝恍┸浖氖褂蒙嫌信霰?第一反應(yīng)就是卸載重裝,所以有小伙伴就問(wèn)我Python怎么卸載才能徹底卸載干凈,今天這篇文章,小編就來(lái)教大家如何徹底卸載Python,需要的朋友可以參考下
    2025-04-04
  • PyQT5速成教程之Qt Designer介紹與入門(mén)

    PyQT5速成教程之Qt Designer介紹與入門(mén)

    這篇文章主要介紹了PyQT5速成教程之Qt Designer介紹與入門(mén),本文以PyCharm為例通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python爬蟲(chóng)爬取圖片的簡(jiǎn)單代碼

    python爬蟲(chóng)爬取圖片的簡(jiǎn)單代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲(chóng)爬取圖片的簡(jiǎn)單代碼內(nèi)容,有興趣的朋友們可以測(cè)試下。
    2021-01-01
  • python微信公眾號(hào)開(kāi)發(fā)簡(jiǎn)單流程實(shí)現(xiàn)

    python微信公眾號(hào)開(kāi)發(fā)簡(jiǎn)單流程實(shí)現(xiàn)

    這篇文章主要介紹了python微信公眾號(hào)開(kāi)發(fā)簡(jiǎn)單流程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論