xpath
xpath(query) :返回query表达式对应的所有节点的selector list。
extract():序列化该节点为Unicode字符串并返回list。
extract()[0] :取出list中的值。
xpath通过节点属性获取节点
div[@属性="属性值"]
//th[@class="common"]
xpath获取节点属性值
/@属性
//th/em/following-sibling::a[1]/@href # 可以得到href属性的值 组成的selector list
xpath获取元素节点中的文本
xpath定位到的是节点本身,要想获取到节点中的文本,需要使用/text()
代码如下:
//tbody[@id ="separatorline"]/following-sibling::tbody//th/em/following-sibling::a[1]/text()
xpath定位兄弟元素
following-sibling 随后的兄弟元素
preceding-sibling 之前的兄弟元素
例:定位51testing论坛里的帖子,不含上方广告类。
查看代码,会发现每个帖子由一个tbody组成,但tbody没有任何属性可以使用,唯一一个id还是动态的。尝试着找到了“版块主题”,发现有个可以使用的id,和其余tbody属于兄弟节点。于是就可以使用“版块主题”来定位它下面的所有tbody。xpth代码如下:
//tbody[@id="separatorline"]/following-sibling::tbody
:: 表示当前节点的父节点。
想要定位“版块主题”上方的tbody可以使用:
//tbody[@id="separatorline"]/preceding-sibling::tbody
想要定位“版块主题”下方的第一个tbody可以使用:
//tbody[@id="separatorline"]/following-sibling::tbody[1]
想要定位“版块主题”下方的第N个tbody可以使用:
//tbody[@id="separatorline"]/following-sibling::tbody[N]
xpath运算符
运算符 | 描述 | 实例 | 返回值 |
---|---|---|---|
| | 计算两个节点集 | //book | //cd | 返回所有拥有 book 和 cd 元素的节点集 |
= | 等于 | 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。 |
or | 或 | price=9.80 or price=9.70 | 如果 price 是 9.80,则返回 true。 如果 price 是 9.50,则返回 false。 |
and | 与 | price>9.00 and price<9.90 | 如果 price 是 9.80,则返回 true。 如果 price 是 8.50,则返回 false。 |
最近有点小浮躁,静不下心来~~~
想要记录自己学习的每一个过程,便于自己查阅,或许也可以帮助正迷惑的你。
最近推荐一个插件xpath helper,在使用xpath定位元素时十分的方便。