天天看點

一文搞懂XPath 定位

XPath (XML Path Language) 是一門在 XML 文檔中查找資訊的語言,可用來在 XML 文檔中對元素和屬性進行周遊。

XPath定位在爬蟲和自動化測試中都比較常用,通過使用路徑表達式來選取 XML 文檔中的節點或者節點集,熟練掌握XPath可以極大提高提取資料的效率。

因為XPath解析資料是基于元素(Element)的樹形結構,是以學習XPath前,先了解一下html的結構及常用标簽。

一文搞懂XPath 定位

關于HTML學習可以參考W3School文檔:https://www.w3school.com.cn/html/index.asp

常用标簽

表達式

描述

nodename

選取此節點的所有子節點。

/

從根節點開始選取,絕對定位

//

從符合條件的元素的開始,而不考慮它們的位置。相對定位

.

選取目前節點

..

選取目前節點的父節點

@

選取屬性

一文搞懂XPath 定位

謂語用來查找某個特定的節點或者包含某個指定值的節點,被嵌在方括号中。

一文搞懂XPath 定位

通配符

*

比對任何元素節點。

比對任何屬性節點。

1.元素屬性,快速定位,唯一屬性: 

<code>//*[@id="images"]</code>

2.層級與屬性結合,解決沒有屬性問題:

<code>//div[@id="images"]/a[1]</code>

3.屬性與邏輯結合,解決多個屬性重名問題:

//*[@id="su" and @class="bg s_btn" ]

注意,表達式裡的下标是從1開始的。 絕對定位以/開頭,依賴頁面的元素的順序和位置,相對定位以//開頭,不依賴頁面元素順序和位置,根據條件進行比對,優先使用相對定位。

學習XPath本質就是掌握各種表達式的技巧,除了上述說到方法外,還有一些特别的定位方式:

4.查找id屬性的值包含"kw"的元素: 

<code>//*[contains(@id,'kw')]</code>

5.查找⽂本⾥包含"新聞"的元素:

<code>//*[contains(text(),'新聞')]</code>

6.查找class屬性中開始位置包含's_form_wrapper'關鍵字的元素:

<code>//*[starts-with(@class,'s_form_wrapper')]</code>

7.使⽤多個相對路徑去定位⼀個元素⽤//分開:

<code>//div[@class=‘formgroup’]//input[@id=‘user-message’]</code>

8.軸定位:

軸定位,使用::表示

一文搞懂XPath 定位

查找id="head"元素後⾯标簽名為input的第一個元素

<code>//*[@id="head"]//following::input[1]</code>

一文搞懂XPath 定位

1.使用Chrome浏覽器的開發者工具,可以快速擷取XPath表達式:

點選選擇光标,選擇頁面上的元素位置,在控制台右鍵選擇Copy XPath,表達式就複制到粘貼闆中了。

一文搞懂XPath 定位

擷取到的XPath路徑:<code>//*[@id="su"]</code>

擷取full XPath:<code>/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input</code>

2.驗證表達式:

按鍵“Ctrl+F”,在控制台中輸入需要檢查的XPath路徑,對應的元素會有的顔色辨別。

一文搞懂XPath 定位
一文搞懂XPath 定位