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

XPATH选择器常用语法

XPath是XML路径语言,用于在XML文档中导航和选择节点。由于HTML可以被视为XML的一种特例,XPath也可以用于HTML文档的元素定位。

1、XPath的基本语法

表达式描述
/从根节点选择(绝对路径)
//从当前节点选择(相对路径),可以是文档中的任何位置
.选择当前节点
..选择当前节点的父节点
@选择属性

2、基本XPath选择器

选择器类型语法示例描述
标签选择器//标签名//button选择所有指定标签的元素
属性选择器//标签名[@属性名='值']//input[@type='text']选择具有指定属性值的元素
ID选择器//*[@id='ID值']//*[@id='username']选择具有指定ID的元素
类选择器//*[@class='类名']//*[@class='btn-primary']选择具有指定类的元素

3、XPath轴

XPath轴用于定义相对于当前节点的节点集:

//div/child::p                 /* 选择div的所有p子元素 */
//div/parent::*                /* 选择div的父元素 */
//div/ancestor::form           /* 选择div的form祖先元素 */
//div/following-sibling::p     /* 选择div后的所有p兄弟元素 */
//div/preceding-sibling::p     /* 选择div前的所有p兄弟元素 */
//div/descendant::span         /* 选择div的所有span后代元素 */

4、XPath函数和运算符

XPath提供了多种函数和运算符,用于更精确的元素定位:

//button[text()='提交']                /* 文本完全匹配 */
//button[contains(text(),'提交')]      /* 文本包含 */
//button[starts-with(@id,'btn')]       /* 属性值开头匹配 */
//input[@required and @type='email']   /* 多条件与 */
//button[@type='submit' or @type='button']  /* 多条件或 */
//div[count(child::p) > 2]             /* 子元素数量条件 */

5、在Playwright中使用XPath

# 基本XPath选择器
page.locator('//button').click()                      # 所有按钮
page.locator('//input[@type="text"]').first().fill('test')  # 第一个文本输入框
page.locator('//*[@id="username"]').fill('user')      # ID选择器
page.locator('//div[@class="error"]').text_content()  # 类选择器# 使用XPath轴
page.locator('//label[text()="用户名"]/following-sibling::input').fill('test')  # 标签后的输入框
page.locator('//input[@id="email"]/parent::div').get_attribute('class')  # 父元素的类# 使用XPath函数
page.locator('//button[contains(text(), "登录")]').click()  # 包含特定文本的按钮
page.locator('//tr[position() mod 2 = 1]').count()  # 奇数行数量
http://www.dtcms.com/a/308508.html

相关文章:

  • langchain从入门到精通(四十二)——全面剖析之Memory
  • 机器学习①【机器学习的定义以及核心思想、数据集:机器学习的“燃料”(组成和获取)】
  • 深度学习基础—2
  • [人工智能-综述-17]:AI革命:重塑职业版图,开启文明新篇
  • day066-内容分发网络(CDN)与web应用防火墙(WAF)
  • 大模型+垂直场景:技术纵深、场景适配与合规治理全景图
  • Rust × WebAssembly 项目脚手架详解
  • Linux服务器性能检测与调优指南
  • 深入解析LLM层归一化:稳定训练的关键
  • 【04】大恒相机SDK C++发开——调试千兆网相机心跳超时设备掉线
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | FeedbackUiDesign(评价反馈组件)
  • 工程项目管理软件选型对比:主流平台功能与适用场景深度测评
  • [12月考试] F
  • 用el-table实现的可编辑的动态表格组件
  • 微信小程序中进行参数传递的方法
  • 【Linux】的起源 and 3秒学习11个基本指令
  • JSX语法
  • 关于AI的使用感想
  • Maven模块化开发与设计笔记
  • 深入解析 Spring AI 系列:剖析OpenAI接口接入组件
  • WEditor:高效的移动端UI自动化脚本可视化编辑器
  • Vibe Coding:AI驱动开发的安全暗礁与防护体系
  • MySql 知识大汇总
  • 架构实战——架构重构内功心法第三式(运筹帷幄)
  • 行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新
  • Ubuntu 18.04 repo sync报错:line 0: Bad configuration option: setenv
  • 三维火灾调查重建:科技赋能,探寻真相
  • 网络安全-同形异义字攻击:眼见并非为实(附案例详解)
  • 什么是 MySQL 的慢查询日志?如何优化慢查询?
  • FastAPI docs接口文档打不开怎么解决