XPath语法详解及案例讲解

XPath(XML Path Language)是一种查询语言,用于在XML或HTML文档中定位节点元素。Selenium广泛使用XPath来定位网页中的元素,尤其适用于复杂的层级结构或属性定位。


1. 基本语法与案例

语法 描述 示例 案例
/ 绝对路径,从根节点开始 /html/body/div 定位根节点下的第一个div元素。
// 相对路径,从任意位置开始 //div 定位文档中所有的div元素。
* 匹配任意元素 //*[@class='btn'] 定位class为btn的所有元素。
@ 属性定位 //input[@id='username'] 定位id="username"的输入框。
text() 定位包含特定文本内容的元素 //button[text()='提交'] 定位文本内容为"提交"的按钮。
contains() 模糊匹配,包含指定值 //div[contains(@class, 'header')] 定位class包含header的所有div元素。
starts-with() 定位以指定值开头的属性 //input[starts-with(@id, 'user')] 定位iduser开头的输入框。

2. XPath 轴选择

轴语法 描述 示例 案例
parent:: 定位父节点 //button/parent::div 定位按钮的父节点div
child:: 定位子节点 //div/child::p 定位div的直接子节点p元素。
ancestor:: 定位祖先节点 //span/ancestor::div 定位span的所有祖先节点div元素。
descendant:: 定位后代节点 //div/descendant::span 定位div下的所有后代节点span
following-sibling:: 定位后续兄弟节点 //h2/following-sibling::p 定位h2标签之后的所有兄弟节点p元素。
preceding-sibling:: 定位前面的兄弟节点 //h2/preceding-sibling::p 定位h2标签之前的所有兄弟节点p元素。

3. XPath 高级用法

3.1 多条件定位
复制代码
//input[@type='text' and @placeholder='请输入用户名']

案例 :定位一个输入框,要求type="text"placeholder="请输入用户名"

3.2 分组定位
复制代码
//div[@id='menu'] | //span[@class='icon']

案例 :同时定位id="menu"divclass="icon"span

3.3 索引定位
复制代码
//ul/li[3]

案例 :定位列表中第3个li元素。


4. 结合案例使用

4.1 定位登录表单
复制代码
//form[@id='loginForm']/input[@name='username']

解释 :定位id="loginForm"的表单内,name="username"的输入框。

4.2 定位特定表格单元格
复制代码
//table[@id='dataTable']/tbody/tr[2]/td[3]

解释 :定位id="dataTable"表格的第2行、第3列。


5. 特殊场景用法

5.1 子节点查找父节点
复制代码
//span[@class='child']/parent::div

案例 :通过class="child"span元素定位其父节点div

5.2 使用文本的模糊查找
复制代码
//a[contains(text(), '更多')]

案例:定位文本中包含"更多"的链接。

5.3 动态元素定位
复制代码
//button[starts-with(@id, 'submit')]

案例 :定位idsubmit开头的按钮。

5.4 复合条件与轴结合
复制代码
//div[@class='content']/descendant::p[text()='文章正文']

案例 :定位class="content"div中,包含文本"文章正文"的p元素。


6. XPath 调试技巧

  1. 浏览器工具:使用 Chrome 或 Firefox 的开发者工具,在控制台中直接测试 XPath 表达式。
  2. 高效定位 :尽量避免使用绝对路径(/html/body/...),多使用相对路径(//div)。
  3. 结合调试工具:如插件 XPath Helper 或 Selenium IDE 快速验证 XPath。
相关推荐
xjt_090110 分钟前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
rannn_11113 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_124987075316 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
我是伪码农22 分钟前
Vue 2.3
前端·javascript·vue.js
短剑重铸之日23 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼19191 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
夜郎king1 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
辰风沐阳1 小时前
JavaScript 的宏任务和微任务
javascript
努力学编程呀(๑•ี_เ•ี๑)1 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea