一,Xpath 简介
Xpath 不是 selenium 专用,只是作为一种定位手段,为 selenium 所用。Xpath 是一门在 xml 文档中查找信息的语言。Xpath 可用来在 xml 文档中对元素和属性进行遍历。由于 html 的层次结构与 xml 的层次结构天然一致,所以使用 Xpath 也能够进行 html 元素的定位。
二,Xpath 定位方法
浏览器中如何找到元素
Chrome 浏览器:按 F12,将鼠标点击下图中的图标,再到浏览器页面上选择需要定位的元素,Elements 页中就会自动定位高亮显示页面中的元素。
- 绝对路径定位
顾名思义,将 Xpath 表达式从 html 的最外层节点,逐层填写,最后定位到操作元素
类似:
//html/body/div/div/div/div/div/form/span[2]/input
这种方法,一旦路径有变化会导致定位失败,所以不推荐使用该方式。

- 相对路径定位
绝对路径与相对路径的差别与文件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在 html 的任意层次中寻找符合条件的元素。
语句以//开始
//span[2]/input

3. 索引号定位
(1)索引号定位
//form/span[2]/input # 表示form标签下的第二个span标签

注意:索引是从1开始
(2)last()-1 是定位到倒数第二个
//li[1]/a/span[last()-1]

(3)last() 是定位到最后一个
//li[1]/a/span[last()]

4. 属性值定位
//*[@id="su"]

//*[@class="btn self-btn bg s_btn"]

//*[@value="百度一下"]

5. 逻辑运算定位
(1)与关系
//*[@value="百度一下" and @id="su" and @class="btn self-btn bg s_btn"]

(2)或关系
//*[@value="百度一下" or @id="su" or @class="btn self-btn bg s_btn"]

(3)非关系
//form/span[2]/input[not(.=2005)]

(4)大于小于定位
测试地址:https://www.w3school.com.cn/example/xmle/books.xml
其他的还有
//book[1]/price[text()>25]

- 属性值模糊匹配定位
模糊匹配的函数有两种:
| xpath函数 | 示例 | 含义 |
|---|---|---|
| starts-with | //input[starts-with(@class,“s”)] | class属性值以 s 开头的input标签 |
| contains | //input[contains(@class,“s_i”)] | class属性值包含 s_i 的input标签 |
//input[starts-with(@id,"s")] # 寻找所有的input标签并且ID属性以s开头

//input[contains(@value,"百度")] # 寻找所有的input标签,并且value属性包含百度

- 轴定位

轴可定义相对于当前节点的节点集。
| 轴名称 | 结果 |
|---|---|
| ancestor | 选取当前节点的所有先辈(父、祖父等) |
| ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 |
| attribute | 选取当前节点的所有属性 |
| child | 选取当前节点的所有子元素 |
| descendant | 选取当前节点的所有后代元素(子、孙等) |
| descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身 |
| following | 选取文档中当前节点的结束标签之后的所有节点 |
| namespace | 选取当前节点的所有命名空间节点 |
| parent | 选取当前节点的父节点 |
| preceding | 选取文档中当前节点的开始标签之前的所有节点 |
| preceding-sibling | 选取当前节点之前的所有同级节点 |
| self | 选取当前节点 |

7.1. 查找到ID为 s-top-left 的 div 标签,下面所有的 a 标签的文本(包含 ID 为 s-top-left 的div 的兄弟 div 标签中的 a 标签)
//div[@id="s-top-left"]/descendant::a/text()

7.2. 查找到ID为 s-top-left 的 div 标签,下面所有的 a 标签的文本(只查找此div标签下面的a标签)
//div[@id="s-top-left"]/child::a
还有其他xpath定位方法,在这里就不列举了,详见代码链接
本文详细介绍了XPath在HTML中的应用,包括简介、定位方法如浏览器中的元素选择、绝对与相对路径、索引定位、属性值定位和逻辑运算定位等,强调了相对路径的重要性,并提供了测试地址和实例。
2345

被折叠的 条评论
为什么被折叠?



