selenium XPath定位的實現(xiàn)示例
一、XPATH概念
XPath是一種用于在 XML 文檔中定位和選擇節(jié)點的語言。它是一種在 XML 文檔中導(dǎo)航和查詢數(shù)據(jù)的標(biāo)準(zhǔn)方式,通常用于從 XML 文檔中提取特定信息或執(zhí)行數(shù)據(jù)操作。XPath 使用路徑表達(dá)式來遍歷 XML 樹,并且支持多種功能,如節(jié)點選取、字符串匹配、數(shù)值計算、邏輯運(yùn)算等,可以幫助用戶準(zhǔn)確定位到文檔中所需的節(jié)點或內(nèi)容。XPath 的語法類似于文件系統(tǒng)路徑,通過使用斜杠(/)、雙斜杠(//)、方括號([])等符號來描述節(jié)點之間的層次關(guān)系和屬性條件,從而實現(xiàn)對 XML 結(jié)構(gòu)的靈活查詢和篩選。XPath 在 XML 數(shù)據(jù)處理、Web 抓取、XSLT 轉(zhuǎn)換等領(lǐng)域廣泛應(yīng)用,為處理和操作 XML 數(shù)據(jù)提供了強(qiáng)大的工具和方法。
二、常用規(guī)則與方法
我們現(xiàn)用表格列舉一下幾個常用規(guī)則:
| 方法 | 概念 |
|---|---|
| / | 從當(dāng)前節(jié)點選取直接子節(jié)點 |
| / / | 從當(dāng)前節(jié)點選取子孫節(jié)點 |
| . | 選取當(dāng)前節(jié)點 |
| … | 選取當(dāng)前節(jié)點的父節(jié)點 |
1.f12例子:
<div>
<ul>
<li class="item-0">
<a rel="external nofollow" >第一項</a>
</li>
<li class="item-1">
<a rel="external nofollow" >第二項</a>
</li>
<li class="item-inactive">
<a rel="external nofollow" >第三項</a>
</li>
<li class="item-1">
<a rel="external nofollow" >第四項</a>
</li>
</ul>
</div>
2.節(jié)點獲取文本
獲取first item文本
- 通過連續(xù)的 / 或 // 可以查找子節(jié)點或子孫節(jié)點
- 我們選取了
第一個li節(jié)點,中括號中傳入數(shù)字1即可,注意這里和代碼中不同,序號是以 1 開頭的,不是 0 開頭的。 - 如果我們要選取
最后一個 li節(jié)點,中括號中傳入last()即可,返回的便是最后一個 li 節(jié)點 - 最后使用
/text()或者在括號外面.text獲取節(jié)點內(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.屬性匹配
在選取的時候我們還可以用 @ 符號進(jìn)行屬性過濾,比如在這里如果我們要選取 class 為 item-0 的 li 節(jié)點,可以這樣實現(xiàn):
dr.find_element(By.XPATH,'//li/a[@class="item-0"]')
在這里我們通過加入 [@class=“item-0”] 就限制了節(jié)點的 class 屬性為 item-0,文本中符合條件的 li 節(jié)點有一個,所以返回結(jié)果應(yīng)該返回匹配到的元素,結(jié)果如下:
第一項
4. 屬性獲取
我們知道了用 text() 可以獲取節(jié)點內(nèi)部文本,那么節(jié)點屬性該怎樣獲取呢?其實還是用 @ 符號就可以,例如我們想獲取所有 li 節(jié)點下所有 a 節(jié)點的 href 屬性,代碼如下:
dr.find_element(By.XPATH,'//li/a/@href')
在這里我們通過 @href 即可獲取節(jié)點的 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)簽時需要使用他的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來定位,第一位時0 driver.switch_to.frame(0)
三、同級節(jié)點元素定位
【同級元素】:
- 向下尋找 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()="第一項"]')
五、定位父級元素
【父級元素】
/parent::
如下面的xpath,定位ul下的li包含"處理"的文本,然后再定位該li的父級元素
完整代碼:
dr.find_element(By.XPATH,'ul/li/parpent::*')
到此這篇關(guān)于selenium XPath定位的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)selenium XPath定位內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django實現(xiàn)celery定時任務(wù)過程解析
這篇文章主要介紹了Django實現(xiàn)celery定時任務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
基于Python實現(xiàn)簡單的學(xué)生點名系統(tǒng)
現(xiàn)在的學(xué)生大部分都很積極,會主動舉手回答問題。但是,也會遇到一些不好的情況,比如年級越高主動舉手的人越少,所以本文做了一個隨機(jī)的學(xué)生點名系統(tǒng)可以幫老師解決這些問題2022-09-09
python基礎(chǔ)while循環(huán)及if判斷的實例講解
下面小編就為大家?guī)硪黄猵ython基礎(chǔ)while循環(huán)及if判斷的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Python.append()與Python.expand()用法詳解
今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python matplotlib生成圖片背景透明的示例代碼
這篇文章主要介紹了Python matplotlib生成圖片背景透明的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

