当前位置: 首页 > 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.lryc.cn/news/584899.html

相关文章:

  • 【操作系统】线程
  • [特殊字符] 扫描式处理:Python 自动提取 PDF 中关键词相关表格并导出为 Excel
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • lodash不支持 Tree Shaking 而 lodash-es可以
  • 零基础入门指南:华为数通认证体系详解
  • 代码随想录|图论|10水流问题
  • 视频人脸处理——人脸面部动作提取
  • 静电式 vs UV 光解:哪种油烟净化技术更适合你的餐厅?
  • python的病例管理系统
  • 【JMeter】执行系统命令
  • VS 按F12 提示cannot navigate to the symbol under the caret
  • 机器学习详解
  • linux中INIT_MM_CONTEXT宏对pgd的重复赋值
  • Windows 10 2021 LTSC【版本号:19044.6036】
  • 设计模式笔记_结构型_代理模式
  • 小白学Python,标准库篇——随机库、正则表达式库
  • 【跟着PMP学习项目管理】每日一练 - 5
  • C++,从汇编角度看《虚拟继承的邪恶》
  • 【Linux】GDB/CGDB 调试器学习笔记
  • 【经典面经】C++新特性 TCP完整收发数据 TLS1.2 TLS1.3
  • AWS控制台升级EKS版本
  • AI进化论07:第二次AI寒冬——AI“改头换面”,从“AI”变成“机器学习”
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • 基于vscode开发工具显示git提交信息的插件
  • Web3.0 支付网络对企业的优势
  • Linux磁盘限速(Ubuntu24实测)
  • spark3 streaming 读kafka写es
  • 可以悬浮在Windows电脑桌面的好用便签软件评测
  • 前端开发—全栈开发
  • php use 命名空间与 spl_autoload_register的关系