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-containedPrimary 和 MuiButton-sizeLarge 类名的按钮。
3. 通过按钮文本("确认")获取 XPath
如果你希望通过按钮文本内容来定位,可以使用以下 XPath:
//button[.//span[text()='确认']]
这个 XPath 会选择按钮内部包含 <span> 标签且文本内容为 "确认" 的 <button> 元素。
4. 通过 type 属性获取 XPath
如果你想通过 type 属性来定位:
//button[@type='submit']
这个 XPath 会选择 type="submit" 的 <button> 元素。
5. 综合选择(通过 id、class 和按钮文本)
为了确保定位准确,你可以通过多个属性来组合选择。例如:
//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-root 和 css-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-root 和 MuiButton-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. 通过多条件组合定位
你也可以组合多个属性来精确定位,例如结合 class、role 和 text 内容:
//span[contains(@class, 'MuiButton-root') and @role='button' and text()='发送验证码']
这个 XPath 会选中 class 中包含 MuiButton-root,role 为 button,并且文本为 "发送验证码" 的 <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-root 和 MuiTypography-body1 的 <span> 元素。
3. 通过类名的组合定位
如果你想通过类名中的多个部分来精确定位该元素,可以结合类名:
//span[contains(@class, 'MuiTypography-root') and contains(@class, 'MuiListItemText-primary')]
此 XPath 会选中 class 属性中同时包含 MuiTypography-root 和 MuiListItemText-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> 元素。
相关文章:
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…...
总结TCP/IP四层模型
总结TCP/IP四层模型 阅读目录(Content) 一、TCP/IP参考模型概述 1.1、TCP/IP参考模型的层次结构二、TCP/IP四层功能概述 2.1、主机到网络层 2.2、网络互连层 2.3、传输层 2.3、应用层 三、TCP/IP报文格式 3.1、IP报文格式3.2、TCP数据段格式3.3、UDP数据段格式3.4、套…...
netcat和nmap的区别
Netcat 和 Nmap 是两种广泛使用的网络工具,但它们的功能和使用场景有所不同。下面是这两种工具的对比: Netcat(nc) 用途和功能: 网络连接: Netcat 是一个功能强大的网络工具,用于创建 TCP 或 UDP 连接。可以用来进行网…...
MinIO服务器文件复制(Windows环境Linux环境)
一、下载 Windows环境:https://dl.min.io/server/minio/release/windows-amd64/minio.exe Linux环境: > curl https://dl.min.io/client/mc/release/linux-amd64/mc \ --create-dirs \ -o $HOME/minio/mc > chmod x $HOME/minio/mc > expo…...
【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
🌟 关于我 🌟 大家好呀!👋 我是一名大三在读学生,目前对人工智能领域充满了浓厚的兴趣,尤其是机器学习、深度学习和自然语言处理这些酷炫的技术!🤖💻 平时我喜欢动手做实…...
无监督学习算法
K-均值聚类(K-means clustering)是一种常用的无监督学习算法,用于将数据集划分成 K 个不同的组或簇。该算法主要通过计算数据点之间的欧几里得距离来确定数据点之间的相似性,并根据相似性将数据点分配到不同的簇中,使得…...
【Compose multiplatform教程17】【组件】BoxWithConstraints组件
查看全部组件 https://blog.csdn.net/b275518834/article/details/144751353 BoxWithConstraints 功能说明:它是 Jetpack Compose 中的关键布局组件,能够精准捕捉自身所在容器的尺寸约束信息,通过获取最大宽度和最大高度这两个关键属性&…...
银河麒麟操作系统安装达梦数据库(超详细)
目录 引言1. 前期准备1.1 安装麒麟系统1.2 下载达梦数据库安装包(DM8)1.3 上传安装包到麒麟系统1.4 挂载安装包(iso)文件1.5 配置安装用户和组1.6 创建安装路径及修改权限1.7 设置临时安装目录 2. 安装达梦数据库(DM8&…...
Spring源码_05_IOC容器启动细节
前面几章,大致讲了Spring的IOC容器的大致过程和原理,以及重要的容器和beanFactory的继承关系,为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的,接下来的每一章都是从总体脉络中, 去研究之前没看的一些重要…...
科大讯飞在线语音合成(流式版)python版
1、进入自己的项目 复制APPID、APISecret、APIKey 2、添加好听发音人 复制vcn参数 3、需要替换代码部分: 换自己喜欢的发声人的参数 换上自己的APPID、APISecret、APIKey 4、完整代码: # -*- coding:utf-8 -*- import _thread as thread import base…...
常见搜索算法汇总
常见搜索算法总结 搜索算法是人工智能和计算机科学中用于解决问题、优化路径或发现数据模式的关键技术。本文将对常见的搜索算法进行总结,包括A*算法、D*算法、模拟退火(Simulated Annealing)、爬山法(Hill Climbing)、…...
vue 中 ref 详解
一、定义与基本用法 1. 定义 在 Vue.js 中,ref是一个用于在组件中获取 DOM 元素或者子组件实例引用的属性。它提供了一种直接访问元素或组件的方式,使得我们可以在 JavaScript 代码中对它们进行操作。 2. 基本使用 在模板中,可以通过给元…...
探索开源项目 kernel:技术的基石与无限可能
在开源的广袤世界中,有一颗璀璨的明星——kernel(https://gitee.com/openeuler/kernel),它宛如一座技术的宝藏,蕴含着无数的智慧与创新,为众多开发者所瞩目和敬仰。 一、初窥 kernel 项目 当我第一次接触…...
C 实现植物大战僵尸(二)
C 实现植物大战僵尸(二) 前文链接,C 实现植物大战僵尸(一) 五 制作启动菜单 启动菜单函数 void startUI() {IMAGE imageBg, imgMenu1, imgMenu2;loadimage(&imageBg, "res/menu.png");loadimage(&am…...
Vivado - TCL 命令(DPU脚本、v++命令、impl策略)
目录 1. 简介 2. TCL 示例 2.1 DPU TCL 脚本 2.1.1 源码-精简 2.1.2 依赖关系 2.1.3 查 v 步骤列表 2.1.4 生成 DPU.XO 2.2 CPU 示例 2.2.1 源码-框架 2.2.2 示例设计详解 2.3 创建运行脚本 2.3.1 Generate scripts 2.3.2 runme.sh 文件 2.3.3 design_1_wrapper…...
【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
文章目录 前言🌍 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术🍁3.1关键特性🍁3.2配置选项🍁3.3使用示例 ❄️4. 连接池之Druid技术🍁 4.1主要特性🍁 4.2 配置选项…...
hadoop-common的下载位置分享
1.GitHub - steveloughran/winutils: Windows binaries for Hadoop versions (built from the git commit ID used for the ASF relase) 2.GitHub - cdarlint/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows 3.winutils: hadoop winutils 镜像...
【机器学习】SVM支持向量机(一)
介绍 支持向量机(Support Vector Machine, SVM)是一种监督学习模型,广泛应用于分类和回归分析。SVM 的核心思想是通过找到一个最优的超平面来划分不同类别的数据点,并且尽可能地最大化离该超平面最近的数据点(支持向量…...
Spring Boot介绍、入门案例、环境准备、POM文件解读
文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…...
基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档
前言 基于Spring Boot Vue3实现的在线商品竞拍管理系统是一种现代化的前后端分离架构的应用程序,它结合了Java后端框架Spring Boot和JavaScript前端框架Vue.js的最新版本(Vue 3)。该系统允许用户在线参与商品竞拍,并提供管理后台…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
