自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中,XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大,但面对复杂 DOM 结构时,XPath 仍然更具灵活性。因此,掌握 XPath,不仅能提高自动化测试的稳定性,还能在爬虫开发、前端调试中提升效率。

在 Web 自动化测试、爬虫开发、前端调试等场景中,XPath 作为一种强大的元素定位方式,常常被用来精准地获取页面元素。你是否在写 XPath 时遇到过:

  • 元素定位失败? 😣
  • 路径过长且不稳定? 🤯
  • 层级太多,维护困难? 💀

如果你也有这些烦恼,那这篇文章一定对你有帮助!今天,我们就来总结 XPath 的常用写法,并推荐几款超好用的 XPath 插件,让你的元素定位更简单高效!

那么,XPath 到底该怎么写才能又短又准?有哪些 XPath 插件可以提高定位效率? 今天我们一起来聊聊!

XPath 语法总结

🎯 1. 绝对路径 vs 相对路径
  • 绝对路径(不推荐):/html/body/div[1]/div[2]/span(路径长,结构变动就失效)
  • 相对路径(推荐)://div[@class='content']//span(更灵活,适应性强)

关于xpath定位网上有好多资料,我推荐在MDN上查看,个人感觉上面讲的比较全面 https://developer.mozilla.org/en-US/docs/Web/XML/XPath xpath是一门在xml文档中查找信息的语言,它使用路径表达式来选取xml文档中的节点或节点集。同样也可以用于html文件元素的查找

xpath节点的关系术语

以下几个术语看字面意思就能明白

  • 父亲(Parent)
  • 子(Children)
  • 同胞、同级(sibling)
  • 祖先(Ancestor)
  • 后代(Descendant)

xpath基础语法

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

例子

路径表达式结果
div选取 div 元素的所有子节点。
/div选取根元素 div。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
div/span选取属于 div 的子元素的所有 span 元素。
//span选取所有 span子元素,而不管它们在文档中的位置。
div//span选择属于 div 元素的后代的所有 span 元素,而不管它们位于 div 之下的什么位置。
//@aria-label选取名为 aria-label 的所有属性。

 

谓语

谓语被嵌在方括号中,查找元素加上一些特定的限定条件

常用的几种方式

//tag[@attribute=”Value”]//input[@class='but1']"找到class=but1的input标签
//tag[@attribute1=”Value1” and @attribute2=”Value2” ]//input[@class='but1' and @name='key']布尔逻辑运算; and/or属性与逻辑结合,解决多个属性重名问题
//tag[contains(@attribute1, ”Value1” )]//input[contains(@placeholder,'请输入')]模糊匹配: (1)存在属性值一部分是一直不变,另一部分是随机生成的 (2)整体属性太长
//tag[starts-with(@attribute1, ”Value1” )]//a[starts-with(@class,'abc123')] 
//tag[text()=”value”]//p[text()=”你好”]text匹配, text也可以用模糊匹配//tag[contains(text(), “value“)]
//tag1/tag2[index]//form/input[2]父节点定位子节点层级与属性结合,解决没有属性的问题
//tag1[@attribute=”Value”]/tag2//input[@class='but1']"/span
//*[@attribute=”value”]/tag2//*[@class='r']/a通过*匹配
//tag1//parent::tag2//span[@icon-name="error-line"]/parent::button由子节点查找父节点
//tag1//preceding-sibling::tag2//span[@icon-name="error-line"]/preceding-sibing::input由弟弟节点查找哥哥节点
//tag1//following-sibling::tag2//input[@aria-label="Email"]/following-sibling::div由哥哥节点查找弟弟节点

 

js执行xpath

有时在页面控制台,想立刻验证定位的元素是否正确,是否可以对它进行一些操作,可以使用js,当然也可以使用jquery,抱歉我还没学到,先不讲了

document.evaluate( xpathExpression, contextNode, namespaceResolver, resultType, result )

第一个参数:是符合xpath语法规则的表达式

contextNode:应评估 xpathExpression 的文档中的节点,包括其任何和所有子节点。document 节点是最常用的

  • namespaceResolver:将传递包含在 xpathExpression 中的任何命名空间前缀的函数,它返回一个表示与该前缀关联的命名空间 URI 的字符串。这使得能够在 XPath 表达式中使用的前缀和文档中使用的可能不同的前缀之间进行转换。该转换函数可以是:

    • 使用 [XPathEvaluator] 对象的 [createNSResolver]方法[创建]。
    • null。其可以用于 HTML 文档或者当不使用命名空间前缀时。注意,如果 xpathExpression 包含命名空间前缀,这将导致一个带有 NAMESPACE_ERR 的 DOMException 抛出。
    • 用户定义的函数。有关详细信息,请参阅附录中的 [使用一个用户定义的命名空间解析器] 部分。
  • resultType:指定作为评估结果返回的所需结果类型的[常数]。最常传递的常量是 XPathResult.ANY_TYPE,它将返回 XPath 表达式的结果作为最自然的类型。附录中有一个部分,其中包含[可用常数]的完整列表。它们在下面“[指定返回类型]部分中进行解释。

  • result:如果指定了现有的 XPathResult 对象,它将被重用以返回结果。指定 null 将创建一个新的 XPathResult 对象。

上实例,以百度输入框为例 我们找到这个输入框,并为这个输入框赋值

 

好用的xpath插件

定位 XPath 规则时,借助浏览器插件可以大大提高效率。以下是几款超实用的插件推荐👇

🦊 1. XPath Helper(Chrome & Edge)
  • ✅ 直接在浏览器中测试 XPath 表达式
  • ✅ 实时高亮匹配的 HTML 元素
  • ✅ 快速复制 XPath 路径
🏹 2. ChroPath(Chrome & Firefox)
  • ✅ 支持自动生成 XPath 和 CSS 选择器
  • ✅ 支持对 XPath 进行验证和优化
  • ✅ 直观的 UI 界面,适合新手
🛠 3. SelectorsHub(Chrome & Edge)
  • ✅ 比 ChroPath 功能更强,支持 Shadow DOM 定位
  • ✅ 支持智能推荐最优 XPath
  • ✅ 可以进行 XPath 教程学习
🔎 4. FirePath(Firefox 专用)
  • ✅ 适用于 Selenium 相关测试
  • ✅ 在 Firebug 插件中直接获取 XPath

如图所示

 

以chrome浏览器为例,安装成功后,在这里显示

点击任何element,会自动生成好几种定位方式的表达式,大部分都能唯一标识,为了验证生成的表达式是否可用,可以安装另两款插件,两者选一个就可以

xpath finder安装好之后,在这里,我们输入刚才第一个插件生成的xpath表达式,我们可以看到在页面能够找到,并把找到的元素标识出来

xpath helper也有异曲同工之妙,安装试试看吧

总结

XPath 看似复杂,但掌握常用语法后,你就能写出高效、稳定、易维护的定位方式。同时,合理使用 XPath 插件,可以极大提高开发和测试效率,让元素定位变得更简单!

每次碰到需要定位的元素简单,我就直接写代码运行即可,如果碰到复杂的,我就会结合xpath插件生成xpath,验证元素是否能找到,然后在控制台验证它是否可操作,会比直接写代码反复调试,节省不少时间, 大家有更好效率更高的方法请在评论区进行探讨!

学会 XPath,测试开发效率翻倍!选对 XPath 插件,让你快人一步!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#,将 JSON POST 到 REST API 端点;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core,并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据,请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…

CSS 实现下拉菜单效果实例解析

1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…

网络安全溯源 思路 网络安全原理

网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通讯的目的,虽然看似简简单单几句话,就描述了网络概念与网络出现的目的,但是为了真正实现两台主机…

【Windows】PowerShell 缓存区大小调节

PowerShell 缓存区大小调节 方式1 打开powershell 窗口属性调节方式2,修改 PowerShell 配置文件 方式1 打开powershell 窗口属性调节 打开 CMD(按 Win R,输入 cmd)。右键标题栏 → 选择 属性(Properties)…

GitCode 助力 Easy-Es,革新 Elasticsearch 开发体验

项目仓库(点击阅读原文链接可直达) https://gitcode.com/dromara/easy-es 项目背景:填补 Elasticsearch ORM 框架空白 在 Java 开发领域,Excel 和 Elasticsearch 的代码编写难度一直名列前茅,尤其是 Elasticsearch&a…

Vue(7)

一.Vuex (1)概述 1.是什么 vuex是一个vue的状态管理工具,状态就是数据,可以帮助管理vue通用的数据(多组件共享的数据) 2.场景 ①某个状态在很多个组件来使用(个人信息) ②多个组…

如何把邮件批量导出到本地

最近遇到邮箱满了的问题,需要把邮件批量导出到本地,然后清空邮箱。 问题是这个邮箱的官网,没有批量导出按钮,比较麻烦;总不能一封一封下载到本地,上万的。 找到了一个好用的工具,Mozilla Thun…

渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.(主动扫描被动扫描) Burp Suite 和 Xray 联合使用,能够将 Burp 的强大流量拦截与修改功能,与 Xray 的高效漏洞检测能力相结合,实现更全面、高效的网络安全测试,同时提升漏…

如何将3DMAX中的3D文件转换为AutoCAD中的2D图形?

大家好,今天我们来探讨一下如何将3DMAX中的3D文件转换为AutoCAD中的2D图形。无论是出于设计交流、施工准备还是其他实际需求,这种转换在工程设计领域都是一项非常实用的技能。接下来,我将为大家详细介绍几种实现这一转换的方法,帮助大家轻松跨越3D与2D设计之间的鸿沟。让我…

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具,由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目,速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰,并且在…

国产编辑器EverEdit - 迷你查找

1 迷你查找 1.1 应用场景 某些场景下,用户不希望调出复杂的查找对话框,此时可以使用迷你查找窗口。 1.2 使用方法 选择主菜单查找 -> 迷你查找,或使用快捷键Ctrl Alt F,会在右上角弹出迷你查找窗口,如下图所示…

攻防世界32 very_easy_sql【SSRF/SQL时间盲注】

不太会,以后慢慢看 被骗了,看见very_easy就点进来了,结果所有sql能试的全试了一点用都没有 打开源代码发现有个use.php 好家伙,这是真的在考sql吗...... 制作gopher协议的脚本: import urllib.parsehost "12…

opc da 服务器数据 转 EtherCAT项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 应用条件 4 查看OPC DA服务器的相关参数 5 配置网关采集opc da数据 6 启动EtherCAT从站转发采集的数据 7 在服务器上运行仰科OPC DA采集软件 8 案例总结 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务器的相…

从基础到人脸识别与目标检测

前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名,在百度地图网站上搜索到的地点可能是商业网点,在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中,搜索地名,如“乱石头川”,该地名会出…

Visual Studio踩过的坑

统计Unity项目代码行数 编辑-查找和替换-在文件中查找 查找内容输入 b*[^:b#/].*$ 勾选“使用正则表达式” 文件类型留空 也有网友做了指定,供参考 !*\bin\*;!*\obj\*;!*\.*\*!*.meta;!*.prefab;!*.unity 打开Unity的项目 注意:只是看&#xff0…

Vue3+codemirror6实现公式(规则)编辑器

实现截图 实现/带实现功能 插入标签 插入公式 提示补全 公式验证 公式计算 需要的依赖 "codemirror/autocomplete": "^6.18.4","codemirror/lang-javascript": "^6.2.2","codemirror/state": "^6.5.2","cod…

【大数据安全分析】大数据安全分析技术框架与关键技术

在数字化时代,网络安全面临着前所未有的挑战。传统的网络安全防护模式呈现出烟囱式的特点,各个安全防护措施和数据相互孤立,形成了防护孤岛和数据孤岛,难以有效应对日益复杂多变的安全威胁。而大数据分析技术的出现,为…

参考数据和主数据:构建数据管理的基石

在数据管理的众多领域中,参考数据和主数据管理是确保数据一致性和准确性的关键环节。它们为组织提供了统一的数据标准和核心业务实体的准确视图,是数据管理的基石。今天,让我们深入《DAMA数据管理知识体系指南(第二版)…