xpath全文叫 xml path language (xml路徑語言)
從xpath的視角來看,xml 或html文件就是檔案系統結構,元素節點可以看做其中某乙個檔案
在html文件中,以html標籤作為根節點,整個文件的形式可以看成是乙個樹形結構
xpath比css多一點功能,比如前向兄弟選擇器,父元素選擇器
我們在後期學習移動應用自動化的時候,它是不支援css的,只支援xpath,所以你現在不學,後面還要學。
以/開始,逐個增加節點名稱用/分割
舉例:/html/body/div/p
表示html文件中的p節點,xpath路徑就表示了元素的位置
特點:不能跨級,類似css中的直接子元素選擇器 >
寫法很簡單:就是把再加乙個/,變成兩個//
舉例://footer//p
表示footer元素中所有的後代p型別元素
使用相對定位法一定要用//開頭
特點:類似css的後代元素選擇器,不要求每層元素都寫
相對定位法可以和絕對定位法結合起來使用
如 //footer/div/p
表示html文件中footer元素下的div元素下的p元素
*表示所有節點,同css
屬性用包裹,屬性名加@符號,屬性值需要用引號包裹
舉例://*[@style] 表示選擇html文件下所有包含style屬性的元素
//p[@spec='len2'] 選擇所有具有spec 值為 len2 的元素
補充學習css子元素選擇器
:nth-child(n)
:nth-of-type(n)
xpath中選擇第幾個子元素方式
通過下標方式獲取:
//div[@id='food']/p[1]
在這裡,下標從1開始
//div[@id='food']/*[last()]
last()代表倒數第乙個元素
表示倒數第二第三個用:
//div[@id='food']/*[last()-1]
//div[@id='food']/*[last()-2]
css中表示倒數第幾個元素的方法
:nth-last-child(n)
:nth-last-of-type(n)
表示第幾個元素除了可以用[1]指定下標這種方式,還有一種方式就是
//div[@id='food']/*[position()=2]
這裡position()就是代表元素的位置,這種寫法也是xpath中的一部分
高階用法:
//div[@id='food']/*[position()=last()]
表示最後乙個元素
//div[@id='food']/*[position()=last()-2]
表示倒數第三個元素
//div[@id='food']/*[position()>=last()-2]
表示最後三個元素
與css組選擇器類似的是,xpath也是用組選擇器來選擇多組元素
css中要表示多個選擇器,用逗號來分割
xpath中 用豎線來隔開
//p | //button
等價於css中的
p, button
舉例,xpath表示相鄰兄弟的方法
//*[@id=』food』]/following-sibling::div
解釋://*[@id=』food』]/ div 表示id為food的直接子元素的div
我們這裡加上following-sibling:: 就變成了id=food節點的相鄰兄弟元素
前向兄弟節點擊擇
選擇某個元素前面的兄弟節點,在css裡無法實現
在xpath裡我們可以用 preceding-sibling:: 來表示
在xpath裡面,你還可以選擇指定元素的父元素,css也不支援此種方法
比如 //*[@class='special'] (先找到這個元素)
我們可以通過模擬linux路徑表現方式獲取到它的父元素:
//*[@class='special']/.. (獲取父元素)然後依次類推,還可以獲取父元素的父元素
使用場景:通常你想定位的元素沒有特徵,只有他的子節點有id這種特徵
爬蟲 css選擇器 和 xpath選擇器
ret soup.select my p ret soup.select body p 子子孫孫 ret soup.select body p 直接子節點 兒子 ret soup.select body p 0 text 直接子節點 兒子 xpath xpath 是一門在 xml 文件中查詢資訊的語...
Xpath 轉 JQuery 選擇器
最近在寫採集時使用 php querylist 發現選擇器可以這樣的步驟生成 使用瀏覽器工具 檢視 採集節點的 xpath 值 例如 id form1 div 3 table 3 tbody tr td 2 table 2 tbody tr td table tbody tr td table 2 ...
常用xpath選擇器和css選擇器總結
表示式說明 article 選取所有article元素的所有子節點 article 選取根元素article article a 選取所有屬於article的子元素的a元素 div 選取所有div子元素 不論出現在文件任何地方 article div 選取所有屬於article元素的後代的div元素...