四、Xpath选择器

Xpath选择器

用途:

不仅可以用来在HTML文档中选择节点,还可以在XML文档中选择节点(手机自动化中会用到)

 

特点

语法非常像Linux系统中的路径,所以又叫做路径表达式

 

 

语法结构

绝对路径表示法:

从根节点(html)开始,路径分割符是/(斜杠,类似于linux中路径分割符)

 

如:/html/body/div/span

表示对应路径下的span元素

相对路径表示法:

以//开头后面加元素名称, 用法类似于css中的后代选择器,可以把//对应css中空格

如://span

表示html文档下所有的span元素

如://div//span

表示方法类似于CSS中的 div span

 

绝对路径与先对路径混合使用:

如: //div/p/span

p和span的位置确定的,分别属于div元素的子元素与孙元素

 

通配符 *

与css中一致,星号(*),表示匹配所有元素

用法://div/*  表示匹配div下面所有元素

等价于css中的 div>*

 

 

属性选择器

使用场景

选择具有某个属性(值)的元素

 

表示方法

//*[@属性] 表示选择具有某个属性的元素

 

//*[@属性=”属性值“] 表示选择具有某个属性值的元素,属性值必须加引号(单引号双引号都可以)

 

示例:

//*[@style]  选择所有具有style属性的元素

//p[@spec='len2'] 选择所有具有spec 值为 len2 的元素

 

Tips:在xpath中没有表示id和class的特殊方法,id 、class 也是属性

如:

//div[@id="food"]

//div[@class="cheese"]

 

根据部分属性选择元素的方法有

//*[contains(@属性,”value“)]

表示属性包含value

 

//*[starts-with(@属性,”value“)]

表示属性以value开头

子元素选择-单选

使用场景

选择属于其父元素的第n个某个 类型的子元素

 

表示方法

//*[n] 表示选择*的父元素下面第n个*类型元素  等价于 *:nth-of-type(n)

或//*[position()=n]   

 

示例:

//p[2], 选择p的父元素下的第二个p元素,等价于 p:nth-of-type(2)

 

倒数下标表示方法

使用场景:

选择属于其父元素的倒数第n个某个 类型的子元素

 

表示方法:

//*[last()-n] 表示选择*的父元素下面倒数第n+1个*类型元素  等价于 *:nth-last-of-type(n)

或//*[position()=last()-n]

示例:

//span[last()-1]    属于其父元素的倒数第二个span  等价于 span:nth-last-of-type(1)

//*[@id="food"]/span[last()]  #food元素下倒数第1个span

//*[last()-1]   父元素下的倒数第二个元素(不限定类型)

 

 

 

子元素选择-多选

使用场景

选择属于其父元素的第m到n之间 某个类型的子元素

 

表示方法

//*[position()>1] 选择属于其父元素的第一个以后的*元素

//*[position()<last()-1] 选择属于其父元素的倒数第二之前的*元素

 

示例:

//*[@id="food"]/*[position() > last()-3]   选择#food下倒数第四个到最后一个元素

 

 

 

组选择

使用场景:

用于多组xpath表达式组合来选择元素的情况

表示方法

<s1>|<s2>

<s1>和<s2> 是两组xpath选择器

示例:

//p | //button  选择所有的p元素, button元素,等价于 p, button

 

//p | //span | //div 选择所有的p元素, span元素和div元素,等价于 p, span,div

 

Tips:  css和xpath的表达式不能混用

 

相邻兄弟选择

使用场景

根据同级元素选择其他的同级元素

 

表示方法

//*/following-sibling::*  选择*后面的兄弟元素  等价于  *~*

//*/preceding-sibling::*  选择*前面的兄弟元素

 

示例:

//*[@id='food']/span/following-sibling::p   选择span元素后面的兄弟元素p

 

//*[@id='food']/p/preceding-sibling::span   选择p元素前面的兄弟元素span

 

扩展

//*[@id='food']/span/following-sibling::p[1]   

span元素后面的第一个兄弟元素p

//*[@id='food']/span/following-sibling::p[last()] 

span元素后面的最远一个兄弟元素P

 

//*[@id='food']/span/following-sibling::p[position()>1] 

span元素后面的第2到最后一个兄弟元素p

 

//*[@id='food']/p/preceding-sibling::span[1]

p元素前面的第一个兄弟元素span

 

//*[@id='food']/p/preceding-sibling::span[last()]

p元素前面的最远的一个兄弟元素span

 

//*[@id='food']/p/preceding-sibling::span[position()>1]

 

p元素前面的第2个到最前面的一个兄弟元素span

 

 

 

父元素选择

使用场景:

根据子元素定位父元素

 

表示方法

//*/..  选择*的父元素,类似于linux中表示上层路径的方法

示例:

//p[@class="special"]/..

选择//p[@class="special"]的父元素

 

//p[@class="special"]/../..

选择//p[@class="special"]的父元素的父元素

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值