xpath定位的高級用法


有時候我們需要先定位到父元素,再去定位某個元素

注意:當你使用 父元素.find_element_by_xpath 這種方式定位的時候,元素定位表達式必須以點開頭,如

ele = driver.find_elements_by_xpath("//div[@id='category-block']//ol/li")       #父元素

b = ele.find_elements_by_xpath('.//li[@class=\'subcate-item\']//span')

如果不用點,會從整個文檔開始找,即使你前邊使用了父元素也沒有效果

絕對路徑定位

絕對路徑定位 從頂層 html 開始往下找,像文件夾一樣寫的完整路徑, 缺點:一旦頁面結構發生改變,路徑也隨之失效,必須重新定位。 所以不推薦使用絕對路徑的寫法

以 "/"  開頭, 讓xpath 從文檔的根節點開始解析 

相對路徑定位

以"//" 開頭, 讓xpath 從文檔的任何元素節點開始解析(也就是說每個節點都作為起點找一下)

索引定位

//input[2]  任意節點下的第二個 input 標簽

屬性定位

//input[@type="submit"]    任意節點下type 屬性為 submit 的 input 標簽

其他定位方式

parent  選取當前節點的父節點

//*[@id="content_views"]/p[51]/span[1]/parent::p

 

 后面的就不一個一個舉例了

 

ancestor  選取當前節點的所有先輩(父、祖父等)

//*[@id="content_views"]/p[51]/span[1]/ancestor::div

ancestor-or-self  選取當前節點的所有先輩(父、祖父等)以及當前節點本身(不包含叔叔伯伯

//*[@id="content_views"]/p[51]/span[1]/ancestor-or-self::div

descendant選取當前節點的所有后代元素(子、孫等)

//*[@id="content_views"]/descendant::span

descendant-or-self選取當前節點的所有后代元素(子、孫等)以及當前節點本身

//*[@id="content_views"]/p[51]/descendant-or-self::p

preceding   選取文檔中當前節點的開始標簽之前的所有節點

//*[@id="content_views"]/p[51]/preceding::p

preceding-sibling選取當前節點之前的所有同級節點

//*[@id="content_views"]/p[51]/span[2]/preceding-sibling::span

following   選取文檔中當前節點的結束標簽之后的所有節點(包括自己及自己的后代元素

//*[@id="content_views"]/p[51]/following::p

following-sibling選取當前節點之后的所有同級節點

//*[@id="content_views"]/p[51]/span[2]/following-sibling::span

注意這個::后面跟的是對應的父、子、同級等標簽


免責聲明!

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



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