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)。该系统允许用户在线参与商品竞拍,并提供管理后台…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
Linux中INADDR_ANY详解
在Linux网络编程中,INADDR_ANY 是一个特殊的IPv4地址常量(定义在 <netinet/in.h> 头文件中),用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法,允许套接字监听所有本地IP地址上的连接请求。 关…...
