国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

這篇具有很好參考價值的文章主要介紹了XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

XPath 通常用來進(jìn)行網(wǎng)站、XML (APP )和數(shù)據(jù)挖掘,通過元素和屬性的方式來獲取指定的節(jié)點,然后抓取需要的信息。

學(xué)習(xí) XPath 語法之前,首先了解一下一些概念。

概念介紹

節(jié)點之間的關(guān)系

XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

以上面的 HTML 節(jié)點樹為例,節(jié)點之間包含了下列的關(guān)系:

  1. 父節(jié)點 (Parent): HTML 是 DIV 和 P 節(jié)點的父節(jié)點;
  2. 子節(jié)點 (Child):DIV 和 P 是 HTML 的子節(jié)點;
  3. 兄弟節(jié)點 (Sibling):擁有同樣的一個父節(jié)點,DIV 和 P 就是兄弟節(jié)點。類似的 span、img 和 i 也是兄弟節(jié)點。
  4. 祖先節(jié)點 (Ancestor):html 是 span 的祖先節(jié)點,隔開一級;
  5. 后代節(jié)點 (Descendant):span 是 HTML 的后代節(jié)點,隔開一級。

除了了解這些概念,parent、sibling 等關(guān)鍵詞也非常關(guān)鍵,在匹配復(fù)雜的結(jié)構(gòu)時常常用到。

絕對和相對路徑

xpath 中絕對路徑使用 / 開始,比如:/html/body/div[1]/a/img,絕對路徑較長,其中可能包含變化的部分,不建議單獨使用絕對路徑來選擇元素,最好配合其它語法。
比如下面的情況單獨使用絕對路徑進(jìn)行定位就會出錯:

// 本意是匹配第三個div下的span,但因為第一個div因為是動態(tài)顯隱的,導(dǎo)致匹配第而個div匹配到之前的第三個了

/html/body/div[2]/span

相對路徑以 // 開始,比如 //*[@class],表示只要包含 class 屬性的元素均可匹配,無論從哪一個節(jié)點開始。

下面是一些常見選擇節(jié)點示例:

表達(dá)式 說明 舉例
/ 下一個節(jié)點,或者根節(jié)點開始 /html/body/div
// 從任意節(jié)點開始 //img
. 選取當(dāng)前節(jié)點 //a/.
.. 當(dāng)前節(jié)點的父節(jié)點 //a/..
@ 選取包含某屬性的元素 //div[@class]或//@class
* 表示任意元素或者任意屬性 //*[@class]

除此之外,通過谷歌瀏覽器-元素上審查元素-復(fù)制 xpath,可以直接獲取絕對路徑和相對路徑。

XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

但復(fù)制下來的代碼,通常還需要進(jìn)行一些修改,才能具備通用性。

基礎(chǔ)語法

定位需要的信息通常通過元素、屬性名、屬性值以及三者結(jié)合等方式進(jìn)行。

下面來分別看一下,也這段 html 代碼為例:

<div id="app">
  <p class="title">喜歡的動物</p>
  <ul>
	<li class="cat">貓</li>
	<li class="dog">狗</li>
	<li id="panda">熊貓</li>
  </ul>
  <p class="title">喜歡的電影</p>
  <ul>
	<li>阿甘正傳</li>
	<li>霸王別姬</li>
	<li>阿凡達(dá)</li>
  </ul>
  <p>其它不需要信息</p>
</div>

1. 通過元素名定位

示例:

1.1 //div/p
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

定位所有 div 下的 p 子元素,可以是任何 div,只要這個 div 的子節(jié)點包含 p 就可以匹配

1.2 //ul
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

會定位從任何節(jié)點開始的 ul 元素

1.3 /html/body/div/p
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

使用絕對路徑定位元素,必須從 /html 開始,否則最好使用 // 相對路徑開始

2. 通過屬性名定位

通過元素是否包含某個屬性來進(jìn)行定位,屬性名需要使用 @ 開始,同時放在 [] 內(nèi)

2.1 //*[@class]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

定位包含 class 屬性的元素

2.2 //@class
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

這種語法定位到的是屬性里面的具體值 title,而不是元素,所有沒有元素沒選中

3. 通過屬性值定位

示例:
//li[@class="cat"]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

定位包含 class 屬性,值為 cat 的 li 屬性元素

4. 使用邏輯運算符定位

常用邏輯運算符包括:and、ornot 三種

示例:

4.1 //li[@class and @class="cat"]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中包含 class 屬性,并且屬性值為 cat 的 li 元素對象。

4.2 //li[@class or @id]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中包含 class 或者 id 屬性的 li 元素對象。

4.3 //li[not(@class)]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中不包含 class 屬性的 li 元素對象。

5. 使用謂語定位

5.1 //li[1]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

定位任意元素下的第一個 li。

注意
xpath 中索引從 1 開始。

5.2 (//li)[1]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

兩者區(qū)別如下:
//li[1] 任意元素下第一個li,也就是說這個 li 在任意的 ul 下是第一個就會被選中
(//li)[1] 將所有的 li 選出來的結(jié)果數(shù)組中取第一個,這兩者是完全不同的含義

6. 使用文本定位

使用元素中文本的內(nèi)容進(jìn)行定位。

示例:

6.1 //li[text()="貓"]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中文本內(nèi)容為 的 li 元素對象。

6.2 //*[contains(text(),"喜歡")]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中任意元素文本中包含 喜歡 兩個字的元素,其中 * 表示所有元素是通配符,contains() 表示包含函數(shù)。
類似的有:starts-withends-with 函數(shù),表示以什么字符開始和字符結(jié)尾的文本。

節(jié)點選擇器

除了相對和絕對選擇之外,下面這些選擇器在處理較復(fù)雜的匹配場景可以發(fā)揮關(guān)鍵作用。

  • parent:::選中父級節(jié)點,/.. 也是選中父級,但是通常 parent:: 用于寫在 [] 里面作為條件來判斷
  • child:::選中子級節(jié)點,/ 也是選中子級,通常也是作為條件來使用
  • preceding-sibling:::選中同一層級的前面所有兄弟節(jié)點
  • following-sibling:::選中同一層級的后面所有兄弟節(jié)點
  • ancestor:::選中祖先節(jié)點,包括父級以及更上層的節(jié)點
  • descendant:::選中當(dāng)前節(jié)點下面的所有節(jié)點,包括子級

舉例:

//*[ancestor::div]
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

選中所有元素中,上級是 div 的元素,其實也就是選中了所有元素,來看看這個
//ancestor::div
XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例

只選中了一個元素。

兩者的區(qū)別如下:
//*[ancestor::div] 選中的 * 表示所有元素,這些元素條件是 [ancestor::div] 父級及以上有 div。
//ancestor::div 選中的是作為別人父級及以上的 div,也就是選中的是 div,這個 div 的是別人的父級或者爺級等
兩者是完全不同的概念

美團(tuán) APP 匹配示例

看了半天 HTML,我們來了解一下 APP 中的 XML,通常匹配 APP 比網(wǎng)頁復(fù)雜太多,基本就那幾個元素,而且屬性名基本都一樣,所以常用的手段還是使用各種條件來進(jìn)行限制匹配,下面來看一個例子。

 <android.view.View index="5" class="android.view.View" text="" checked="false" clickable="true">
  <android.widget.TextView index="1" class="android.widget.TextView" text="象山酥院(湛江印象匯店)" checked="false"/>
  <android.widget.TextView index="2" class="android.widget.TextView" text="" checked="false" clickable="true"/>
  <android.view.View index="3" class="android.view.View" text="" checked="false">
    <android.widget.TextView index="0" class="android.widget.TextView" text="5.0" checked="false" />
  </android.view.View>
  <android.widget.TextView index="4" class="android.widget.TextView" text="周銷量 872" checked="false" />
</android.view.View>
<android.view.View index="5" class="android.view.View" text="" checked="false" clickable="true">
  <android.widget.TextView index="1" class="android.widget.TextView" text="蜜雪冰城" checked="false"/>
  <android.widget.TextView index="2" class="android.widget.TextView" text="" checked="false" clickable="true"/>
  <android.view.View index="3" class="android.view.View" text="" checked="false">
    <android.widget.TextView index="0" class="android.widget.TextView" text="5.0" checked="false"/>
  </android.view.View>
  <android.widget.TextView index="4" class="android.widget.TextView" text="周銷量 2322" checked="false"/>
</android.view.View>

上面代碼為美團(tuán)的城市列表頁面的 UI XML 代碼,其中每個元素都包含大量相同的屬性和屬性值,關(guān)鍵在于整個頁面,任何地方基本就是 android.view.Viewandroid.widget.TextView ,像匹配 HTML 那樣元素顯然行不通。

示例:獲取兩個商品的評分
//*[@text and ancestor::*/following-sibling::*[contains(@text, '周銷量')]]
規(guī)則解釋:獲取任何包含 text 屬性的元素,它的父級的的兄弟元素必須是一個 text 值中包含 "周銷量"的元素。
我這里沒有使用 [1][2][3] 來定位,是因為不同商品的屬性很多時候不一樣。

通常還是根據(jù)想要的元素的位置,以及相鄰元素的特征來定位,首先找到獨特的文本,比如上面的周銷量是固定會出現(xiàn)的,還有 符號也可以,這些都是位置和文本值固定的,找到這個的位置,再去定位需要的元素的位置。文章來源地址http://www.zghlxwxcb.cn/news/detail-825085.html

工具推薦

  1. 谷歌瀏覽器-審查元素- ctrl + f,可以直接輸入 xpath 語句
  2. 谷歌瀏覽器-selectorshub 插件,文中使用的是這個插件

到了這里,關(guān)于XPath從入門到精通:基礎(chǔ)和高級用法完整指南,附美團(tuán)APP匹配示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包