Playwright爬虫xpath获取技巧

示例一

<button class="MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-colorPrimary MuiButton-fullWidth MuiButton-root MuiLoadingButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-colorPrimary MuiButton-fullWidth css-wxfct4" tabindex="0" type="submit" id=":r6:"><span class="MuiLoadingButton-label css-oz8hdd"><span>确认</span></span><span class="MuiTouchRipple-root css-4mb1j7"></span></button>

1. 通过 id 属性获取 XPath

如果 id 是唯一的,可以直接通过 id 来定位该按钮:

//button[@id=':r6:']

这个 XPath 会选择 id=":r6:"<button> 元素。

2. 通过 class 属性获取 XPath

由于按钮有多个类名,可以使用类名进行定位。如果你想选择包含特定类名的按钮,可以使用 contains() 方法:

//button[contains(@class, 'MuiButton-containedPrimary') and contains(@class, 'MuiButton-sizeLarge')]

这个 XPath 会选择同时包含 MuiButton-containedPrimaryMuiButton-sizeLarge 类名的按钮。

3. 通过按钮文本("确认")获取 XPath

如果你希望通过按钮文本内容来定位,可以使用以下 XPath:

//button[.//span[text()='确认']]

这个 XPath 会选择按钮内部包含 <span> 标签且文本内容为 "确认" 的 <button> 元素。

4. 通过 type 属性获取 XPath

如果你想通过 type 属性来定位:

//button[@type='submit']

这个 XPath 会选择 type="submit"<button> 元素。

5. 综合选择(通过 idclass 和按钮文本)

为了确保定位准确,你可以通过多个属性来组合选择。例如:

//button[@id=':r6:' and contains(@class, 'MuiButton-containedPrimary') and .//span[text()='确认']]

示例二

<div class="MuiStack-root css-1w7p9qt" variant="borderless"><div class="MuiStack-root css-1ilan5m"><img src="/images/flags/aq.svg" style="display: block; width: 30px; height: 30px;"></div><i color="inherit" size="20" class="iconfont icon-arrow-down-simple css-1k924bf"></i></div>

1. 定位图片 (<img>) 元素

图片 (<img>) 的 src 属性是唯一的,因此你可以通过 src 来定位该图片:

//img[@src='/images/flags/aq.svg']

这个 XPath 会选中 src='/images/flags/aq.svg'<img> 元素。

2. 通过父元素定位图片

如果你想定位图片 <img> 元素,并且考虑到它的父元素 <div> 类名为 MuiStack-root css-1ilan5m,可以通过父元素来精确定位:

//div[@class='MuiStack-root css-1ilan5m']//img[@src='/images/flags/aq.svg']

这个 XPath 会在 class='MuiStack-root css-1ilan5m' 的父元素下,选择 src='/images/flags/aq.svg' 的图片元素。

3. 定位图标元素 (<i>)

你可以通过图标的 class 属性来定位图标元素:

//i[@class='iconfont icon-arrow-down-simple css-1k924bf']

这个 XPath 会选择 class='iconfont icon-arrow-down-simple css-1k924bf'<i> 元素。

4. 通过整个父元素定位图标

如果你希望通过父容器来定位图标,可以结合父元素的类名来选择图标:

//div[@class='MuiStack-root css-1w7p9qt']//i[@class='iconfont icon-arrow-down-simple css-1k924bf']

这个 XPath 会选中位于 class='MuiStack-root css-1w7p9qt' 的父元素下的图标 <i> 元素。

5. 组合父元素和图片的定位

如果你想要通过组合父元素和图片的类名来定位图片,可以使用以下 XPath:

//div[@class='MuiStack-root css-1ilan5m']//img[@style='display: block; width: 30px; height: 30px;']

示例三

<p class="MuiTypography-root MuiTypography-body1 css-g6tbiw">澳大利亚</p>

这是一个包含文本 "澳大利亚" 的 <p> 元素,并且它具有多个 class 属性值。以下是几种可能的 XPath 表达式来定位该 <p> 元素:

1. 通过 class 属性定位

由于该 <p> 元素具有多个类名,你可以通过组合这些类名来精确定位它:

//p[@class='MuiTypography-root MuiTypography-body1 css-g6tbiw']

该 XPath 会选中 class='MuiTypography-root MuiTypography-body1 css-g6tbiw'<p> 元素。

2. 通过文本内容定位

如果你想根据元素的文本内容来定位该 <p> 元素,可以使用以下 XPath:

//p[text()='澳大利亚']

这个 XPath 会选中文本内容为 "澳大利亚" 的 <p> 元素。

3. 通过部分类名匹配定位

有时类名可能会发生变化,但可以通过部分类名匹配来定位元素。例如,使用 contains() 函数来匹配类名:

//p[contains(@class, 'MuiTypography-root') and contains(@class, 'css-g6tbiw')]

这个 XPath 会选中 class 属性包含 MuiTypography-rootcss-g6tbiw<p> 元素。

4. 通过父元素定位

如果该 <p> 元素位于某个特定的父元素内,你也可以通过父元素来定位。例如,假设它位于某个特定 div 中:

//div//p[text()='澳大利亚']

这个 XPath 会选中父元素是 <div> 的情况下,文本内容为 "澳大利亚" 的 <p> 元素。

5. 通过多个类名精确定位

//p[@class='MuiTypography-root MuiTypography-body1 css-g6tbiw']

示例四

<span class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary SendCodeButton css-7ans5j" tabindex="0" role="button">发送验证码</span>

我们可以通过多种方式来定位该元素。以下是一些可能的 XPath 表达式:

1. 通过文本内容定位

这是最简单的方法,如果你只关心元素的文本内容,可以使用以下 XPath:

//span[text()='发送验证码']

该 XPath 会选中文本内容为 "发送验证码" 的 <span> 元素。

2. 通过类名定位

由于该 <span> 元素有多个类名,你可以使用 @class 属性来定位该元素。由于类名较长且有重复部分,最好选择具有唯一性的类名,例如:

//span[contains(@class, 'SendCodeButton')]

此 XPath 会选中 class 属性中包含 "SendCodeButton" 的 <span> 元素。

3. 通过 role 属性定位

如果你想通过 role 属性来定位该元素,可以使用如下 XPath:

//span[@role='button' and text()='发送验证码']

这个 XPath 会选中 role='button' 且文本内容为 "发送验证码" 的 <span> 元素。

4. 通过 tabindex 属性定位

tabindex 属性通常用于指定页面的 tab 键顺序。你也可以使用它来定位元素:

//span[@tabindex='0' and text()='发送验证码']

该 XPath 会选中 tabindex='0' 且文本内容为 "发送验证码" 的 <span> 元素。

5. 通过类名的组合定位

由于类名包含多个唯一标识符,可以通过组合类名来精确定位该元素。例如,使用 contains() 函数来匹配部分类名:

//span[contains(@class, 'MuiButton-root') and contains(@class, 'MuiButton-textPrimary')]

该 XPath 会选中 class 属性中包含 MuiButton-rootMuiButton-textPrimary<span> 元素。

6. 通过完整类名定位

如果类名的组合在页面中是唯一的,可以通过完全匹配类名来精确定位:

//span[@class='MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary SendCodeButton css-7ans5j']

这个 XPath 选中 class 属性完全匹配的 <span> 元素。

7. 通过多条件组合定位

你也可以组合多个属性来精确定位,例如结合 classroletext 内容:

//span[contains(@class, 'MuiButton-root') and @role='button' and text()='发送验证码']

这个 XPath 会选中 class 中包含 MuiButton-rootrolebutton,并且文本为 "发送验证码" 的 <span> 元素。

示例五

<span class="MuiTypography-root MuiTypography-body1 MuiListItemText-primary css-g6tbiw">短信</span>

我们可以通过多种方法来定位它,下面是一些可能的 XPath 表达式:

1. 通过文本内容定位

如果你只关心文本内容为 "短信" 的元素,可以使用以下 XPath:

//span[text()='短信']

这个 XPath 会选中文本内容为 "短信" 的 <span> 元素。

2. 通过类名定位

由于该 <span> 元素有多个类名,你可以使用 @class 属性来定位它。例如:

//span[contains(@class, 'MuiTypography-root') and contains(@class, 'MuiTypography-body1')]

这个 XPath 会选中 class 属性中包含 MuiTypography-rootMuiTypography-body1<span> 元素。

3. 通过类名的组合定位

如果你想通过类名中的多个部分来精确定位该元素,可以结合类名:

//span[contains(@class, 'MuiTypography-root') and contains(@class, 'MuiListItemText-primary')]

此 XPath 会选中 class 属性中同时包含 MuiTypography-rootMuiListItemText-primary<span> 元素。

4. 通过类名和文本内容结合定位

你也可以结合 class 属性和文本内容来定位该元素:

//span[contains(@class, 'MuiTypography-body1') and text()='短信']

这个 XPath 会选中 class 包含 MuiTypography-body1 且文本内容为 "短信" 的 <span> 元素。

5. 通过完整类名定位

如果类名在页面中是唯一的,可以使用完整的类名来精确定位:

//span[@class='MuiTypography-root MuiTypography-body1 MuiListItemText-primary css-g6tbiw']

这个 XPath 会选中 class 属性完全匹配的 <span> 元素。

6. 通过 text() 和多个属性结合定位

你可以结合多个属性来精确定位,例如:

//span[@class='MuiTypography-root MuiTypography-body1 MuiListItemText-primary css-g6tbiw' and text()='短信']

这个 XPath 会选中 class 完全匹配且文本为 "短信" 的 <span> 元素。

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

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

相关文章

CCNP_SEC_ASA 第六天作业

实验需求&#xff1a; 为保障内部用户能够访问Internet&#xff0c;请把10.1.1.0/24网络动态转换到外部地址池202.100.1.100-202.100.1.200&#xff0c;如果地址池耗尽后&#xff0c;PAT到Outside接口 提示&#xff1a;需要看到如下输出信息 Inside#telnet 202.100.1.1 Trying …

计算机网络 (13)信道复用技术

前言 计算机网络中的信道复用技术是一种提高网络资源利用率的关键技术。它允许在一条物理信道上同时传输多个用户的信号&#xff0c;从而提高了信道的传输效率和带宽利用率。 一、信道复用技术的定义 信道复用&#xff08;Multiplexing&#xff09;就是在一条传输媒体上同时传输…

敏捷开发Scrum的深入理解和实践

敏捷开发&#xff0c;特别是Scrum方法&#xff0c;已经逐渐成为软件开发领域的主流方法。Scrum不仅适用于软件开发&#xff0c;还适用于其他需要快速响应变化和灵活交付的领域。本文将深入探讨Scrum的核心概念、流程、优势、挑战及其在实践中的应用。 一、Scrum的核心概念 Scru…

计算机视觉目标检测-2

文章目录 摘要abstract1.Fast R-CNN1.1 RoI pooling1.2 End-to -End model1.3 多任务损失-Multi-task loss1.4 R-CNN、SPPNet、Fast R-CNN效果比对 2.Faster R-CNN2.1 RPN原理2.2 效果对比2.3 Faster R-CNN总结 3.总结4.参考文献 摘要 本周学习了Fast R-CNN和Faster R-CNN算法…

JavaScript网页设计案例:动态交互式任务列表

在现代网页开发中&#xff0c;JavaScript被广泛应用于实现动态交互效果。看完这一篇你就可以设计一个动态任务列表&#xff0c;全面展示HTML、CSS和JavaScript在前端开发中的实际应用。通过本案例&#xff0c;你将深入了解事件监听、DOM操作以及用户交互设计的实现过程。 案例需…

【MySQL】索引 面试题

文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;通过维护特定查找算法的数据结构&#xff08;如B树&#xff09;&#xff0c;以某种方式引用数据&#xf…

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法&#xff1a;删掉没有用的数据&#xff08;行与列&#xff09;和股代码格式处理&#xff0c;是和外部数据的制作方法是相同&#xff0c;自己上面看历史博文。只需要判断一下&#xff0c;股代码跟随的…

【ELK】ES单节点升级为集群模式--太细了!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言准备工作1. 查看现状【单节点】2. 原节点改集群模式3. 改es配置文件&#xff0c;增加集群相关配置项4. *改docker映射的端口* 启动新节点5. docker-compose起一…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速&#xff0c;被认为是安全计算的突破&#xff0c;但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述&#xff0c;帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

webauthn介绍及应用

1、webauthn介绍 官网&#xff1a;https://webauthn.io/ 1.1、什么是webauthn&#xff1f; webauthn即Web Authentication&#xff0c;是一个符合W3C标准的Web认证规范。它通过公私钥加密技术&#xff0c;实现无密码认证&#xff0c;用户仅需通过pin码、指纹、面部识别、usb …

ElasticSearch如何做性能优化?

大家好&#xff0c;我是锋哥。今天分享关于【ElasticSearch如何做性能优化?】面试题。希望对大家有帮助&#xff1b; ElasticSearch如何做性能优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Elasticsearch 是一个开源的分布式搜索引擎&#xff0c;广泛用于…

瑞芯微全新芯片平台RK3506优势详解,高集成低功耗,为工业而生 触觉智能测评

RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台&#xff0c;三核Cortex-A7单核Cortex-M0多核异构设计&#xff0c;CPU频率达1.5Ghz, M0 MCU为200Mhz。 而RK3506芯片平台下的工业级芯片型号RK3506J&#xff0c;具备-40-85℃的工业宽温性能、发热量小&#…

Docker 安装全攻略:从入门到上手

Docker 安装全攻略&#xff1a;从入门到上手 在当今的软件开发与部署领域&#xff0c;Docker 已经成为了一项不可或缺的关键技术。它能够将应用程序及其依赖项打包成轻量级、可移植的容器&#xff0c;极大地简化了开发、测试和部署的流程。本文将详细讲解在不同操作系统下 Doc…

【 Sonarqube】可视化Java项目单元测试覆盖率统计框架搭建

一、项目背景&#xff1a; 一个小公司的朋友反应他们那边Java项目单元测试有&#xff0c;但还没有可视化统计覆盖率数据&#xff0c;没法统计就不能直观的看到单测的覆盖率&#xff0c;Java的覆盖率统计框架还是比较成熟&#xff0c;部署起来也不是很难&#xff0c;下面我们逐…

PTA数据结构编程题7-1最大子列和问题

我参考的B站up的思路 题目 题目链接 给定K个整数组成的序列{ N 1 ​ , N 2 ​ , …, N K ​ }&#xff0c;“连续子列”被定义为{ N i ​ , N i1 ​ , …, N j ​ }&#xff0c;其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 1…

jangow-01-1.0.1靶机

靶机 ip&#xff1a;192.168.152.155 把靶机的网络模式调成和攻击机kali一样的网络模式&#xff0c;我的kali是NAT模式, 在系统启动时(长按shift键)直到显示以下界面 ,我们选第二个&#xff0c;按回车。 继续选择第二个&#xff0c;这次按 e 进入编辑页面 接下来&#xff0c;…

在Windows上读写Linux磁盘镜像的一种方法

背景 嵌入式开发中&#xff0c;经常会把系统的Linux磁盘镜像保存到Windows上&#xff0c;以便上传到网盘备份或发送给工厂&#xff0c;但是如果想读取/修改镜像中的某个文件&#xff0c;一般有2种方案&#xff1a; 直接访问 就是用虚拟磁盘软件将镜像文件挂载成磁盘&#xf…

apisix的hmac-auth认证

目录 1、apisix的hmac认证Authorization头信息 2、signature的lua生成源码 3、java生成签证的简单示例 4、postman调用如下 apisix的hmac-auth认证&#xff0c;介绍可以看官方文档 hmac-auth | Apache APISIX -- Cloud-Native API Gateway 照着官方文档&#xff0c;发现生…

大数据导论汇总

第一章 作业 2、请阐述把数据变得可用需要经过哪几个步骤. 答&#xff1a;一共要经历三个步骤&#xff1a;数据清洗、数据管理、数据分析。 第一步&#xff1a;数据清洗。使用数据的第一步通常是数据清洗&#xff0c;也就是把数据变成一种可用的状态。这个过程需要借助工具去…

React 组件的通信方式

在 React 应用开发中&#xff0c;组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据&#xff08;父组件向子组件传递数据&#xff0…