XPATH选择器的使用

1、什么是XPATH?

        XPath 即XML 路径语言(XML Path Language),用于在 XML 文档中查找信息(在XML文档中对元素和属性进行遍历),也适用于HTML 文档。

2、选取节点

        使用路径表达式:

表达式描述
nodename(节点名称)选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

        查找某个特定的节点或者包含某个指定的值的节点:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元 素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子 元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其 中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

        选取未知节点:(使用通配符)

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

3、XPATH运算符

运算符描述实例返回值
|计算两个节点集//book | /cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 4 10
减法6 – 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
!=不等于price!=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
<小于price<9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
>大于price>9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
orprice=9.80 or price=9.70如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
andprice>9.00 and price<9.90如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod计算除法的余数5 mod 21

4、节点之间的关系

        1. 父(Parent)

        2.子(Children)

        3.同胞(Sibling)

        4.先辈(Ancestor) --- 包括父和父的父

        5.后代(Descendant) --- 包括子和子的子

5、使用案例

        (1)使用绝对路径:/html/body/div/form/input 绝对路径是 从网页起始标签开始一直到要定位的元素的路径,如果要定位的元素在页面最下面,则这个Xpath 路径会非常长。如果在要定位的元素与页面开始之间的元素有任何增减,元素定位就会失败。

        (2)使用相对路径://input 相对路径一般只包含与被定位元素关系最近的几层元素,相对路径写的好的话,页面变动影响最小,而且定位准确。

        (3)使用索引定位元素,索引的初始值为1://input[2] 如果一个页面中有多个相似的元素,或是一个层下面有多个同样的元素的时候,需要用索引的方法来定位,否则无法区分。

        (4)结合属性值来定位元素://input[@id='username'] 属性定位也是比较常用的方法,如果元素中没有常见的id,name,class 等直接有方法可调用的属性,也可以查找元素中是否有其他能唯一标识元素的属性,如果有,就可以用此方法定位。

        (5)使用多个属性定位元素://input[@id='username' and @name='userID'] 多个属性联合定位,更能准确定位到元素。(注意:匹配多个属性:用and连接; 匹配属 性的多个值:contains(..., ...))。

        (6)使用属性名来定位元素://input[@button] 此方法可以区分同一种标签,含有不同 属性名的元素。定位相对简单一些儿,但也同样存在着无法区分同种标签含有同种 属性名的多个元素,这个时候要配合索引定位才行。

        (7)使用部分属性值匹配元素,用starts-with(),ends-with(),contains(): //input[stars-with(@id,'user')]; //input[ends-with(@id,'name')]; //input[contains(@id,"ernam")] 此方法更加灵活,可以定位属性值不太规律,或 是部分变动,中间有空格的情况。

        (8)使用任意属性值匹配元素://input[@*='username'] 此方法相当于模糊查询,只要 欲定位的标签,如input中任何属性值等于‘username’,就能匹配成功。缺点是可能会匹配含有这个属性值的其他元素,所以我们在定位的时候要查看一下这个元素值 在页面中是否唯一。

        (9)使用文本匹配元素://input[contains(text(),'text')] 注:获取元素的内容用text()。

6、总结

        用Xpath 定位时,先看这个元素是否有明显的,唯一的属性值。如果有, 我们就用相对路径加属性值定位,这是最简单准确的定位方法。如果要定位的元素 不符合这个特征,例如:元素属性是动态的,无法区分这个元素,属性值中间有空 格,等等。那么应该从此元素的上一层开始查找。当遇到了一个符合条件的元素时, 对其写Xpath。然后从这个元素开始,一级级往下写,直到要定位的元素为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不懂竞赛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值