web自动化如何使用xpath定位元素

时间:2022-05-24 14:27:14

XPath 路径表达式

XPath 使用路径表达式来选取 Html 中的节点或者节点集。

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

HTML 实例

我们将在下面的例子中使用这个 HTML

<html>
<bookstore>
<book id="book1">
<title lang="eng">学习xpath</title>
      <price id="test1">29.99</price>
    </book>
<book id="book2">
<title lang="eng">学习xpath</title>
<price id="test2">39.95</price>
    </book>
</bookstore>
</html>

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式 结果
//bookstore 选取 bookstore 元素的所有子节点。
//bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
//bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//book[@lang] 选取包含 lang 的有属性所有book元素,而不管它们在文档中的位置。

常用的XPath 轴

轴可定义相对于当前节点的节点集。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
parent 选取当前节点的父节点。
following-sibling 选取当前节点之后的所有同级节点。
preceding-sibling 选取当前节点之前的所有同级节点。

 

假如我们需要定位:

第一个book节点的title,因为此处的2个title标签的所有属性都一样,所以我们需要借助它邻近的元素定位到它。

//price[@id='test1']/preceding-sibling::title

xpath解读:首先找到id是test1的price节点,然后找到它之前的同级title节点。

//book[@id='book1']/title

xpath解读:首先找到id是book1的book节点,然后找到它直接子节点title。

 

其它轴实例:

//price/parent::book

xpath解读:定位price的直接父级节点book

//title/following-sibling:web自动化如何使用xpath定位元素rice

xpath解读:定位title后面同级节点price

//title//ancestor::book

xpath解读:定位title的所有父级、祖父级的book节点

 

xpath的/和//区别:

/是仅仅查找它直接父节点或者子节点

//是查找它所有的父级和祖父级...节点

 

详情请查阅:

http://www.w3school.com.cn/xpath/index.asp