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)。该系统允许用户在线参与商品竞拍,并提供管理后台…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...