selenium XPath定位的實(shí)現(xiàn)示例
一、XPATH概念
XPath是一種用于在 XML 文檔中定位和選擇節(jié)點(diǎn)的語言。它是一種在 XML 文檔中導(dǎo)航和查詢數(shù)據(jù)的標(biāo)準(zhǔn)方式,通常用于從 XML 文檔中提取特定信息或執(zhí)行數(shù)據(jù)操作。XPath 使用路徑表達(dá)式來遍歷 XML 樹,并且支持多種功能,如節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等,可以幫助用戶準(zhǔn)確定位到文檔中所需的節(jié)點(diǎn)或內(nèi)容。XPath 的語法類似于文件系統(tǒng)路徑,通過使用斜杠(/)、雙斜杠(//)、方括號(hào)([])等符號(hào)來描述節(jié)點(diǎn)之間的層次關(guān)系和屬性條件,從而實(shí)現(xiàn)對(duì) XML 結(jié)構(gòu)的靈活查詢和篩選。XPath 在 XML 數(shù)據(jù)處理、Web 抓取、XSLT 轉(zhuǎn)換等領(lǐng)域廣泛應(yīng)用,為處理和操作 XML 數(shù)據(jù)提供了強(qiáng)大的工具和方法。
二、常用規(guī)則與方法
我們現(xiàn)用表格列舉一下幾個(gè)常用規(guī)則:
| 方法 | 概念 |
|---|---|
| / | 從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn) |
| / / | 從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn) |
| . | 選取當(dāng)前節(jié)點(diǎn) |
| … | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) |
1.f12例子:
<div>
<ul>
<li class="item-0">
<a rel="external nofollow" >第一項(xiàng)</a>
</li>
<li class="item-1">
<a rel="external nofollow" >第二項(xiàng)</a>
</li>
<li class="item-inactive">
<a rel="external nofollow" >第三項(xiàng)</a>
</li>
<li class="item-1">
<a rel="external nofollow" >第四項(xiàng)</a>
</li>
</ul>
</div>
2.節(jié)點(diǎn)獲取文本
獲取first item文本
- 通過連續(xù)的 / 或 // 可以查找子節(jié)點(diǎn)或子孫節(jié)點(diǎn)
- 我們選取了
第一個(gè)li節(jié)點(diǎn),中括號(hào)中傳入數(shù)字1即可,注意這里和代碼中不同,序號(hào)是以 1 開頭的,不是 0 開頭的。 - 如果我們要選取
最后一個(gè) li節(jié)點(diǎn),中括號(hào)中傳入last()即可,返回的便是最后一個(gè) li 節(jié)點(diǎn) - 最后使用
/text()或者在括號(hào)外面.text獲取節(jié)點(diǎn)內(nèi)部文本
dr.find_element(By.XPATH,'//div/ul/li[1]/a/text()') dr.find_element(By.XPATH,'//div/ul/li[1]/a').text
3.屬性匹配
在選取的時(shí)候我們還可以用 @ 符號(hào)進(jìn)行屬性過濾,比如在這里如果我們要選取 class 為 item-0 的 li 節(jié)點(diǎn),可以這樣實(shí)現(xiàn):
dr.find_element(By.XPATH,'//li/a[@class="item-0"]')
在這里我們通過加入 [@class=“item-0”] 就限制了節(jié)點(diǎn)的 class 屬性為 item-0,文本中符合條件的 li 節(jié)點(diǎn)有一個(gè),所以返回結(jié)果應(yīng)該返回匹配到的元素,結(jié)果如下:
第一項(xiàng)
4. 屬性獲取
我們知道了用 text() 可以獲取節(jié)點(diǎn)內(nèi)部文本,那么節(jié)點(diǎn)屬性該怎樣獲取呢?其實(shí)還是用 @ 符號(hào)就可以,例如我們想獲取所有 li 節(jié)點(diǎn)下所有 a 節(jié)點(diǎn)的 href 屬性,代碼如下:
dr.find_element(By.XPATH,'//li/a/@href')
在這里我們通過 @href 即可獲取節(jié)點(diǎn)的 href 屬性
我們還能使用selenium里dr.find_elements方法,用for循環(huán)取便歷所有的"//li/a",用.get_attribute(‘href’),將所有的href屬性全部獲取,代碼如下:
a=dr.find_elements(By.XPATH,'//li/a')
for href in a:
print(href.get_attribute('href'))
5.iframe標(biāo)簽處理
當(dāng)有frame標(biāo)簽時(shí)需要使用他的id來進(jìn)行切換,要不然不能取到frame標(biāo)簽下的內(nèi)容
語法:
switch_to.frame(“frame_id”)
例子:
<body> <iframe src = "a.html" id = "frame_id" name = "myframe"> </iframe> </body>
如何定位到iframe呢:
from selenium import webdriver driver = webdriver.Chrome() #用frame的index來定位,第一位時(shí)0 driver.switch_to.frame(0)
三、同級(jí)節(jié)點(diǎn)元素定位
【同級(jí)元素】:
- 向下尋找 following-sibling::
- 向上尋找 preceding::

通過li[2]QQ登錄使用following-sibling::找微博登錄:
dr.find_element(By.XPATH,'//div[@class='_3x8w3YCi']/ul/li[2]/following-sibling::li[1]')

- 通過li[2]QQ登錄使用preceding-sibling::找微信登錄:
dr.find_element(By.XPATH,'//div[@class='_3x8w3YCi']/ul/li[2]/preceding-sibling::li[1]')

四、關(guān)鍵字定位
根據(jù)文本找位置
dr.find_element(By.XPATH,'//li/a[text()="第一項(xiàng)"]')
五、定位父級(jí)元素
【父級(jí)元素】
/parent::
如下面的xpath,定位ul下的li包含"處理"的文本,然后再定位該li的父級(jí)元素
完整代碼:
dr.find_element(By.XPATH,'ul/li/parpent::*')
到此這篇關(guān)于selenium XPath定位的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)selenium XPath定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談python中str字符串和unicode對(duì)象字符串的拼接問題
今天小編就為大家分享一篇淺談python中str字符串和unicode對(duì)象字符串的拼接問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python gensim使用word2vec詞向量處理中文語料的方法
這篇文章主要介紹了python gensim使用word2vec詞向量處理中文語料的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python爬蟲爬取美劇網(wǎng)站的實(shí)現(xiàn)代碼
一直在學(xué)習(xí)Python爬蟲,所以今天就心血來潮來寫了個(gè)爬蟲,抓取該網(wǎng)站上所有美劇鏈接,并保存在文本文檔中,想要哪部劇就直接打開復(fù)制鏈接到迅雷就可以下載啦2016-09-09
Python使用itcaht庫實(shí)現(xiàn)微信自動(dòng)收發(fā)消息功能
這篇文章主要介紹了Python使用itcaht庫實(shí)現(xiàn)微信自動(dòng)收發(fā)消息功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
使用用Pyspark和GraphX實(shí)現(xiàn)解析復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)
GraphX是Spark提供的圖計(jì)算API,它提供了一套強(qiáng)大的工具,這篇文章將詳細(xì)為大家介紹如何在Python?/?pyspark環(huán)境中使用graphx進(jìn)行圖計(jì)算,感興趣的可以了解下2024-01-01
Python實(shí)現(xiàn)按特定格式對(duì)文件進(jìn)行讀寫的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)按特定格式對(duì)文件進(jìn)行讀寫的方法,可實(shí)現(xiàn)文件按原有格式讀取與寫入的功能,涉及文件的讀取、遍歷、轉(zhuǎn)換、寫入等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11

