python+selenium基礎之XPATH軸定位(第二篇)


第一篇講了xpath定位的一些基本定位方法,這里再介紹一種:xpath軸定位,應用場景是當某個元素的各個屬性及其組合都不足以定位時,那么可以利用其兄弟節點或者父節點等各種可以定位的元素進行定位。

1.xpath軸是什么

w3cschool上的定義如下:

語法

2.具體應用

(1)descendant表示取當前節點的所有后代元素

定位百度首頁的“百度一下”按鈕

可以看到, <input>標簽的父元素是<span>標簽,而<span>標簽的父元素是<form>標簽,所以可以通過先定位<form>標簽,然后利用descendant定位<input>標簽

xpath路徑如下:

xpath= "//form[@id='form']/descendant::input[@id='su']"

//form[@id='form']表示找到id屬性為'form'的<form>標簽,descendant::input表示找到<form>標簽的所有后代<input>標簽,然后通過[@id='su']精准定位到id屬性為'su'的<input>標簽

把路徑放到瀏覽器控制台,按下Ctrl+F,然后輸入xpath路徑,查看一下,確實定位到了<input>標簽(在執行程序之前,可以通過這種方式來驗證一下寫的xpath路徑是否正確

(2)following表示選取當前節點結束標簽之后的所有節點

注意這里說的是“結束標簽之后”,所以在用這個軸進行定位時要看清目標標簽的與輔助定位標簽的層級關系

所以上例中就不能通過<form>標簽結合following來定位,因為<input>標簽在<form>標簽里面;

分析一下:<input>標簽的上級是一個<span>標簽,這個<span>標簽上面也有一個<span>標簽,可以通過它來定位

xpath= "//span[@id='s_kw_wrap']/following::input[@id='su']"
//span[@id='s_kw_wrap']表示定位到id屬性為s_kw_wrap的<span>標簽,/following::input[@id='su']表示找到<span>結束標簽(即</span>)后的所有input標簽,然后通過[@id='su']精准定位到id屬性為'su'的<input>標簽

(3)parent::可指定要查找的當前節點的直接父節點,例如,父節點是個div,即可寫成parent::div,如果要找的元素不是直接父元素,則不可使用parent,可使用ancestor,代表父輩、祖父輩等節點;

child::表示直接子節點元素

following-sibling只會標識出當前節點結束標簽之后的兄弟節點,而不包含其他子節點

https://www.guru99.com/這個網站為例,

定位Learn Python,思路如下:先定位Learn SQL,然后找到Learn SQL的父節點li,然后再找li的兄弟節點,即包含Learn Python的那個li標簽,然后再找li的孩子節點,也就是a標簽

//a[text()='Learn SQL']/parent::li/following-sibling::li/child::a[text()='Learn Python']
也可以這樣寫//a[text()='Learn SQL']/parent::li/following-sibling::li[3]/a

(4).//和//的區別

//是指從全文上下文中搜索//后面的節點,而.//則是指從前面的節點的子節點中進行查找

(參考博客:https://blog.csdn.net/qingchunjun/article/details/54772940

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM