天天看點

Python Selenium Xpath進階定位用法

分享知識  傳遞快樂

目前很多網頁前端代碼是架構或 JS 生成的,就導緻了混亂而難以定位。為了快速而又複雜定位 Selenium 中有一個 Xpath 選擇器,可以選擇複雜的頁面定位,也是爬蟲在網頁定位中的較優的選擇。

1、通過絕對路徑定位元素

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

2、通過相對路徑定位元素

driver.find_element_by_xpath("//input")      

3、使用索引定位元素

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

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

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

5、使用XPATH的屬性名稱定位元素

# 查找所有input标簽中含有type屬性的元素
driver.find_element_by_xpath("//input[@type]")

# 查找所有a标簽中含有onclick屬性的元素
driver.find_element_by_xpath("//a[@onclick]")

.....      

6、使用任意值來比對屬性及元素

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

7、使用模糊的屬性值比對

starts-with():比對一個屬性開始位置的關鍵字,是模糊定位的一種。

# 比對id以submit開頭的元素,如:id='submit'
driver.find_element_by_xpath("//input[start-with(@id,'submit')]")      

ends-with():比對一個屬性結束位置的關鍵字,是模糊定位的一種。

# 比對id以submit結尾的元素,如:id='submit'
driver.find_element_by_xpath("//input[ends-with(@id,'submit')]")      

contains():比對一個屬性值中包含的字元串,也是模糊定位的一種。

# 比對id中含有submit的元素,如:id='submit'
driver.find_element_by_xpath("//input[contains(@id,'submit')]")

# 比對name屬性中包含na關鍵字的頁面元素
driver.find_element_by_xpath("//input[contains(@name,'na')]")      

text():根據文本資訊比對元素位置。

# 如:<a href="http://www.baidu.com">百度搜尋</a>
driver.find_element_by_xpath("//a[text()='百度搜尋'] ")
driver.find_element_by_xpath("//a[contains(text(),"百度搜尋")]")      

last():函數位置定位。

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

8、過慮某個元素

name():擷取标簽名稱。

# 表示過慮掉在 div id='query_reulst_box' 的下的 style 标簽和 meta 标簽
driver.find_element_by_xpath("//div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text())      

如需了解更多請參考:​​XPath 文法​​​、​​XPath 函數​​