当前位置: 首页 > news >正文

XPath 语法【Web 自动化-定位方法】

🧭 XPath 语法简介(Web 自动化核心定位手段)

一、XPath 是什么?

  • XPath(XML Path Language)是用于在 XML/HTML 文档中定位节点的语言,由 W3C 标准定义。
  • 浏览器支持的是 XPath 1.0
  • 应用场景广泛:用于 SeleniumScrapy 爬虫Appium 移动自动化 等。

二、XPath 与 CSS 对比

特性

CSS Selector

XPath

向上选父节点

❌ 不支持

✅ 支持 /..

向前选兄弟节点

❌ 不支持

preceding-sibling::

根据属性部分匹配

^= *=

starts-with() contains()

结构匹配表达力强

中等

非常强大


三、XPath 基本语法

1️⃣ 绝对路径(从根节点开始)

/html/body/div

等同于 CSS:html > body > div

2️⃣ 相对路径(常用)

//div

表示从任意位置开始,选择所有的 div 元素。// 类似 CSS 的后代选择器空格。

3️⃣ 子元素选择

//div/p       # 直接子元素
//div//p      # 任意后代元素

4️⃣ 通配符 *

//div/*       # div下所有直接子节点

四、按属性选择元素

基础语法

//*[@属性名='属性值']     # 注意 @ 符号和引号

示例

//*[@id='west']
//*[@class='capital huge-city']

⚠️ class 为多个值时,必须匹配完整。

存在属性(不要求值)

//*[@multiple]     # 选择有 multiple 属性的所有元素

属性部分匹配

//*[contains(@style, 'color')]         # 包含 color
//*[starts-with(@style, 'color')]      # 以 color 开头

⚠️ ends-with() 是 XPath 2.0,不被浏览器支持。


五、按位置/顺序选择

第 N 个某类元素

//p[2]           # 所有 p 中的第 2 个
//div/p[2]       # div 下的 p 中第 2 个

第 N 个任意子元素

//div/*[2]

倒数第几个

//p[last()]          # 最后一个 p
//p[last()-1]        # 倒数第二个
//div/p[last()-2]    # div 中 p 的倒数第三个

范围选择

//option[position()<=2]
//*[@class='multi_choice']/*[position()>=last()-2]

六、组合选择、父节点与兄弟节点

组选择(或运算)

//option | //h4
//*[@class='a'] | //*[@class='b']

父节点选择

//*[@id='china']/..

可以用于先选子,再回到父节点。

兄弟节点选择

//*[@class='single_choice']/following-sibling::*        # 后续兄弟
//*[@class='single_choice']/preceding-sibling::*[1]     # 前一兄弟

CSS 仅支持后续兄弟(~),不支持前兄弟选择。


七、Selenium 中使用 XPath 的注意点

1️⃣ 基本用法

driver.find_elements(By.XPATH, "//div")

2️⃣ 在 WebElement 内部查找子节点时要加 .

china = driver.find_element(By.ID, 'china')
elements = china.find_elements(By.XPATH, './/p')  # 必须加点

如果不加 .//,会从整个 DOM 根节点开始查找,而不是从当前元素。


✅ 小结:XPath 常用关键字/函数速查表

表达式

含义

/

绝对路径或直接子节点

//

相对路径或任意后代节点

*

通配符,匹配任意标签

[@attr='value']

根据属性精确匹配

contains(@attr, xxx)

属性包含子串

starts-with(@attr, x)

属性以字符串开头

position()

子元素的位次

last()

最后一个子元素位置

/..

父节点

preceding-sibling::*

前兄弟节点

following-sibling::*

后兄弟节点

`

`

组选择

http://www.dtcms.com/a/274062.html

相关文章:

  • [java][springboot]@PostConstruct的介绍和用法
  • 机器学习基础知识【 激活函数、损失函数、优化器、 正则化、调度器、指标函数】
  • AI加持的开源知识库新秀:PandaWiki,如何用它打造智能化文档系统?
  • 「日拱一码」024 机器学习——防止过拟合
  • 【yolo】模型训练参数解读
  • 哪个ai写论文比较好?实测推荐这6大AI论文写作神器
  • CCF-GESP 等级考试 2025年6月认证C++五级真题解析
  • 2025年值得推荐的5款 AI赋能企业级项目管理软件工具大盘点!
  • Linux:多线程---同步生产者消费者模型
  • 【尝试】基于YoloV8做安全帽识别
  • 12. 说一下 https 的加密过程
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • CCN-508 规范
  • Web 网站性能优化之 Nginx 优化指南
  • 提示工程:突破Transformer极限的计算科学
  • S7-1200 系列 PLC 中 SCL 语言的 PEEK 和 POKE 指令使用详解
  • IDE 关联 Git 操作
  • Java使用OSHI获取服务器信息
  • 如何在报表开发工具FastReport .NET 中构建和连接 Firebird 插件?
  • SpringBoot JWT
  • 异步技术:Web 性能优化的核心引擎
  • crmeb多门店对接拉卡拉支付小程序聚合收银台集成全流程详解
  • 电力自动化的通信中枢,为何工业交换机越来越重要?
  • Vue框架之模板语法全面解析
  • [面试] 手写题-爬楼梯,斐波那契数列
  • 揭示张量分析的强大力量:高级研究的基础-AI云计算拓展核心内容
  • 【时时三省】(C语言基础)通过指针引用数组元素
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-A题 农业灌溉系统优化
  • 基于kafka的分布式日志收集与实时监控平台(原理,框架)
  • (满满的坑LLAMA3使用申请被拒绝rejected)利用huggingface导入LLAMA3模型