Selenium之 CSS 选择器详细讲解
Selenium之 CSS 选择器详细讲解
引言
在.Selenium.自动化测试中,元素定位是至关重要的一环。而.CSS.选择器作为一种强大且灵活的定位工具,在.Selenium.中得到了广泛的应用。本文将详细介绍.CSS.选择器的基本语法、常用类型以及如何在.Selenium.中高效地使用它们。
一、CSS选择器基础知识
1. 什么是CSS选择器?
CSS选择器(Cascading Style Sheets Selector) 是一种用于从HTML文档中选取元素的模式语言。它允许我们通过标签名、类名、ID、属性值等多种方式来定位页面中的特定元素。
在.Selenium.中,我们可以使用.CSS.选择器来定位需要操作的元素,例如输入框、按钮、链接等。
2. 基本语法
以下是.CSS.选择器的一些基本语法示例:
-
标签选择器:
tagname
- 示例:
div
表示选择所有<div>
标签。
- 示例:
-
ID选择器:
#id
- 示例:
#username
表示选择id="username"
的元素。
- 示例:
-
类选择器:
.class
- 示例:
.btn-primary
表示选择class="btn-primary"
的所有元素。
- 示例:
-
属性选择器:
[attribute]
,[attribute=value]
- 示例:
input[type='text']
表示选择所有类型为文本的输入框。
- 示例:
二、CSS选择器的常见类型
1. 标签选择器
标签选择器用于根据元素的HTML标签来定位。例如:
// 定位第一个 <h1> 元素
h1 {color: red;
}
在.Selenium.中,可以使用以下方式定位:
# 使用CSS选择器定位
element = driver.find_element(By.CSS_SELECTOR, "h1")
2. ID选择器
ID选择器通过元素的 id
属性来定位。由于 id
是唯一的,因此它是最高效的选择器之一。
示例 HTML:
<input type="text" id="username">
CSS选择器:
#username {width: 200px;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, "#username")
3. 类选择器
类选择器通过元素的 class
属性来定位。一个元素可以有多个类,因此类选择器非常灵活。
示例 HTML:
<button class="btn primary">Submit</button>
CSS选择器:
.btn.primary {background-color: blue;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, ".btn.primary")
4. 属性选择器
属性选择器可以根据元素的属性及其值来定位。支持以下几种形式:
[attribute]
:匹配拥有该属性的所有元素。[attribute=value]
:匹配属性值等于指定值的元素。[attribute^=value]
:匹配属性值以value
开头的元素。[attribute$=value]
:匹配属性值以value
结束的元素。[attribute*=value]
:匹配属性值包含value
的元素。
示例 HTML:
<input type="text" name="username">
CSS选择器:
input[name='username'] {border: 1px solid black;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, "input[name='username']")
5. 组合选择器
(1) 后代选择器(Descendant Selector)
后代选择器用于匹配某个元素的所有后代元素。语法为 parent child
。
示例 HTML:
<div class="container"><p>这是一个段落。</p>
</div>
CSS选择器:
.container p {color: red;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, ".container p")
(2) 子代选择器(Child Selector)
子代选择器用于匹配某个元素的直接子元素。语法为 parent > child
。
示例 HTML:
<ul><li>列表项1</li><li>列表项2</ul>
</ul>
CSS选择器:
ul > li {color: blue;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, "ul > li")
(3) 相邻兄弟选择器(Adjacent Sibling Selector)
相邻兄弟选择器用于匹配某个元素的下一个直接兄弟元素。语法为 selector + selector
。
示例 HTML:
<div class="header"><h1>标题</h1>
</div>
<p>这是一个段落。</p>
CSS选择器:
.header + p {margin-top: 20px;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, ".header + p")
(4) 通用兄弟选择器(General Sibling Selector)
通用兄弟选择器用于匹配某个元素的所有后续兄弟元素。语法为 selector ~ selector
。
示例 HTML:
<div class="item">Item1</div>
<div class="item">Item2</div>
CSS选择器:
.item ~ .item {margin-top: 10px;
}
在.Selenium.中:
elements = driver.find_elements(By.CSS_SELECTOR, ".item ~ .item")
三、高级CSS选择器
1. 使用伪类选择器
伪类选择器用于匹配元素的某种状态或位置。常见的伪类包括:
:first-child
:匹配第一个子元素。:last-child
:匹配最后一个子元素。:nth-child(n)
:匹配第n个子元素(支持公式,如2n
表示偶数)。
示例 HTML:
<ul><li>列表项1</li><li>列表项2</li><li>列表项3</li>
</ul>
CSS选择器:
li:first-child {color: red;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, "li:first-child")
2. 使用属性包含匹配
除了基本的属性匹配,还可以使用以下方法:
^=
:以指定值开头。$=
:以指定值结尾。*=
:包含指定值。
示例 HTML:
<a href="https://www.example.com/index.html">Example</a>
CSS选择器:
a[href$='.html'] {color: green;
}
在.Selenium.中:
element = driver.find_element(By.CSS_SELECTOR, "a[href$='.html']")
四、注意事项
- 唯一性:尽量确保选择器的唯一性,避免定位到多个元素。
- 性能:复杂的选择器可能会影响性能,建议优先使用
id
或class
。 - 浏览器兼容性:某些高级选择器可能在旧版本浏览器中不支持。
五、总结
CSS选择器在前端开发和自动化测试中都非常重要。通过合理使用各种选择器类型,可以高效地定位元素并实现所需功能。
相关文章:
Selenium之 CSS 选择器详细讲解
Selenium之 CSS 选择器详细讲解 引言 在.Selenium.自动化测试中,元素定位是至关重要的一环。而.CSS.选择器作为一种强大且灵活的定位工具,在.Selenium.中得到了广泛的应用。本文将详细介绍.CSS.选择器的基本语法、常用类型以及如何在.Selenium.中高效地…...
【LeetCode】大厂面试算法真题回忆(61)--组装新的数组
题目描述 给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则: R中元素总和加起来等于M。R中的元素可以从N中重复选取。R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)。请输出:数组R一共有多少组装办法。 输入描…...
基于用户的协同过滤推荐系统实战项目
文章目录 基于用户的协同过滤推荐系统实战项目1. 推荐系统基础理论1.1 协同过滤概述1.2 基于用户的协同过滤原理1.3 相似度计算方法1.3.1 余弦相似度(Cosine Similarity)1.3.2 皮尔逊相关系数(Pearson Correlation)1.3.3 欧几里得距离(Euclidean Distance)1.3.4 调整余弦相似度…...
浅析数据库面试问题
以下是关于数据库的一些常见面试问题: 一、基础问题 什么是数据库? 数据库是按照数据结构来组织、存储和管理数据的仓库。SQL 和 NoSQL 的区别是什么? SQL 是关系型数据库,使用表结构存储数据;NoSQL 是非关系型数据库,支持多种数据模型(如文档型、键值对型等)。什么是…...
【Python3】Django 学习之路
第一章:Django 简介 1.1 什么是 Django? Django 是一个高级的 Python Web 框架,旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”(DRY,Don’t Repeat Yourself)的原则,并提供了…...
Java并发编程高频面试题(已整理Java面试宝典PDF完整版)
为什么要使用并发编程 提升多核CPU利用率:现代计算机通常配备多核CPU,通过创建多个线程,操作系统可以将不同线程分配到不同CPU核心上并行执行,从而充分利用硬件资源。若仅使用单线程,则只能利用一个CPU核心,…...
第 4 期:DDPM中的损失函数——为什么只预测噪声?
—— 从变分下界到噪声预测 回顾:我们到底在做什么? 在第 3 期中,我们介绍了扩散模型的逆过程建模。简而言之,目标是通过神经网络学习从噪声 x_t 中恢复图像 x_0,并且我们通过预测噪声 ϵ来完成这个任务。 今天&a…...
Docker使用、容器迁移
Docker 简介 Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境。Docker 容器是轻量级的虚拟化单元,运行在宿主机操作系统上,通过隔离机制(如命名空间和控制组)确保应用运行环境的一致性和可移…...
专业热度低,25西电光电工程学院(考研录取情况)
1、光电工程学院各个方向 2、光电工程学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、光学工程25年相较于24年下降20分, 2、光电信息与工程(专硕)25年相较于24年上升15分 3、25vs24推免/统招人数对比 学长、学姐分析…...
六、LangChain Agent 最佳实践
1. 架构设计与组件选择 (1) 核心组件分层设计 Model(LLM驱动层) 生产环境推荐:使用 gpt-4-1106-preview 或 Anthropic Claude 3 等高性能模型,结合 model.with_fallbacks() 实现故障转移(如备用模型或本地模型)。本地部署:选择 Llama3-70B 等开源模型,搭配 Docker 或 …...
ubantu18.04(Hadoop3.1.3)之MapReduce编程
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 第二步&…...
PoCL环境搭建
PoCL环境搭建 **一.关键功能与优势****二.设计目的****三.测试步骤**1.创建容器2.安装依赖3.编译安装pocl4.运行OpenCL测试程序 Portable Computing Language (PoCL) 简介 Portable Computing Language (PoCL) 是一个开源的、符合标准的异构计算框架,旨在为 OpenCL…...
关于hadoop和yarn的问题
1.hadoop的三大结构及各自的作用? HDFS(Hadoop Distributed File System):分布式文件系统,负责海量数据的存储,具有高容错性和高吞吐量。 MapReduce:分布式计算框架,用于并行处理大…...
软件工程中数据一致性的探讨
软件工程中数据一致性的探讨 引言数据一致性:软件工程中的业务正确性与性能的权衡数据一致性为何重要业务正确性:事务的原子性与一致性ACID原则的基石分布式事务的挑战一致性级别:从强一致到最终一致 实践中的一致性权衡金融系统:…...
在服务器上安装redis
1.安装所需插件gcc 查看gcc版本 gcc -v 没有安装的话,安装命令如下 yum -y install gcc 2.安装 下载安装包 https://download.redis.io/releases/ 将安装包上传到/opt/software目录下 解压安装包 cd /opt/software tar -zxvf redis-6.2.6.tar.gz 编译并安装redis到指…...
如何选择适合您的过程控制器?
在现代工业中,过程控制器是确保生产效率、质量和安全性的关键设备。它们可以精准监测温度、湿度等变量,优化制造流程,减少人工干预,从而降低错误率和运营成本。但您是否清楚,哪种过程控制器更适合您的企业?…...
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…...
闲来无事,用HTML+CSS+JS打造一个84键机械键盘模拟器
今天闲来无聊,突发奇想要用前端技术模拟一个机械键盘。说干就干,花了点时间搞出来了这么一个有模有样的84键机械键盘模拟器。来看看效果吧! 升级版的模拟器 屏幕录制 2025-04-18 155308 是不是挺像那么回事的?哈哈! 它…...
极狐GitLab 项目导入导出设置介绍?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 导入导出设置 (BASIC SELF) 导入和导出相关功能的设置。 配置允许的导入源 在从其他系统导入项目之前,必须为该…...
极狐GitLab 项目 API 的速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本,功能标志为rate_limit_for_unauthenticated_projects_api_…...
electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;
在 Electron 中,有主进程和渲染进程 主进程:在Node.js环境中运行—意味着能够使用require模块并使用所有Node.js API 渲染进程:每个electron应用都会为每个打开的BrowserWindow(与每个网页嵌入)生成一个单独的渲染器进…...
【前沿】成像“跨界”测量——扫焦光场成像
01 背景 眼睛是人类认识世界的重要“窗口”,而相机作为眼睛的“延伸”,已经成为生产生活中最常见的工具之一,广泛应用于工业检测、医疗诊断与影音娱乐等领域。传统相机通常以“所见即所得”的方式记录场景,传感器捕捉到的二维图像…...
基于C++(MFC)图形编辑界面工具
MFC 图形编辑界面工具 一、背景 喔,五天的实训终于结束了,学校安排的这次实训课名称叫高级程序设计实训,但在我看来,主要是学习了 Visual C .NET 所提供的 MFC(Microsoft Foundation Class)库所提供的类及其功能函数…...
Linux网络通信核心机制解析与层级架构探秘
作为现代操作系统的神经网络,Linux网络通信系统通过多层协作架构实现高效的数据传输机制。本文将从模块化设计、报文处理路径、核心组件交互等多个维度,解析Linux网络通信系统的实现原理与优化策略,并结合内核源码示例与性能调优实践…...
Tensorflow实现用接口调用模型训练和停止训练功能
语言:Python 框架:Flask、Tensorflow 功能描述:存在两个接口,一个接口实现开始训练模型的功能,一个接口实现停止训练的功能。 实现:用一个全局变量存储在训练中的模型。 # 存储所有训练任务 training_task…...
HTTP测试智能化升级:动态变量管理实战与效能跃迁
在Web应用、API接口测试等领域,测试场景的动态性和复杂性对测试数据的灵活管理提出了极高要求。传统的静态测试数据难以满足多用户并发、参数化请求及响应内容验证等需求。例如,在电商系统性能测试中,若无法动态生成用户ID、订单号或实时提取…...
PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战
PyTorch 在深度学习中提供了多种 IEEE 754 二进制浮点格式的支持,包括半精度(float16)、Brain‑float(bfloat16)、单精度(float32)和双精度(float64),并通过统…...
《软件设计师》复习笔记(14.2)——统一建模语言UML、事务关系图
目录 1. UML概述 2. UML构造块 (1) 事物(Things) (2) 关系(Relationships) 真题示例: 3. UML图分类 (1) 结构图(静态) (2) 行为图(动态) 4. 核心UML图详解 5.…...
基于C++(MFC)的细胞识别程序
基于 mfc 的细胞识别程序 一、图像处理课程设计目标 1.1 课题与技术指标 课题:利用图像处理技术设计细胞识别程序。 技术指标: 实验 VS2019 MFC 开发平台待识别图像为 24bit 的真彩色细胞图像进行处理要求识别出细胞,并且保证准确度情况下…...
【前端HTML生成二维码——MQ】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前端HTML生成二维码——MQ 前言本文将介绍前端HTML如何更具用户输入的内容生成对应的二维码,附页面代码、实现函数、js脚本。一、自定义显示页面1、效果图二、使用步骤1、引入库2、实现函数3、页面及函数代…...
Spring Boot自动配置原理深度解析:从条件注解到spring.factories
大家好!今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎,因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧!👀 🌟 什么是自动配置…...
【unity实战】Animator启用root motion根运动动画,实现完美的动画动作匹配
文章目录 前言1、动画分类2、如何使用根位移动画? 一、根位移动画的具体使用1、导入人形模型2、导入动画3、配置动画参数4、配置角色Animator动画状态机5、使用代码控制人物前进后退 二、问题分析三、Humanoid动画中的Root Motion机制及相关配置1、Humanoid动画中的…...
(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
目录 演示视频: 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程: Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频: &…...
2d深度预测
Depth anything v1 相对深度估计,要用绝对深度估计需要微调 概要: 1 使用大量的未标注图像信息 2 采用优化策略—数据增强工具(作用在未标注图像) 3 进行辅助监督—继承语义分割知识(作用在未标注图像) 数据层面: …...
Android12 ServiceManager::addService源码解读
源码 Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {auto ctx mAccess->getCallingContext();// apps cannot add servicesif (multiuser_get_app_id(ctx.uid) >…...
【HDFS入门】HDFS性能调优实战:从基准测试到优化策略
目录 引言 1 HDFS性能评估体系 1.1 性能评估体系架构 1.2 基准测试工具对比 2 TestDFSIO基准测试实战 2.1 TestDFSIO工作原理 2.2 测试执行步骤 2.3 结果分析指标 3 TeraSort基准测试实战 3.1 TeraSort测试流程 3.2 测试执行命令 3.3 关键性能指标 4 HDFS性能调优…...
Linux 内核开发/测试工具对比 Windows 驱动验证工具 (Driver Verifier)
Windows 的 Driver Verifier 是一个用于测试和验证驱动程序的强大工具。在 Linux 内核开发中,虽然没有一个完全等价的单一工具,但有多种工具和框架可以提供类似或更专业的功能。 Linux 内核开发和测试工具 1. KASAN (Kernel Address Sanitizer) 功能&…...
通信算法之269 : OFDM信号的循环自相关特性用于无人机图传信号识别
OFDM信号的循环自相关特性是其循环平稳性的核心体现,如下: [相关仿真代码,联系,提供] 一、循环自相关特性来源 循环前缀引入周期性 OFDM符号通过添加循环前缀(CP)形成符号周期结构,导致信号具有循环平稳性26。每个符号的CP与尾部数据重复,在时延等于FFT长度(N…...
【无人机】电子速度控制器 (ESC) 驱动电机,常见的电调协议,PWM协议,Oneshot协议,DShot协议
目录 1、ESCs & 电机 #1.1、ESC 协议 --ESC Protocols #1.1.1、PWM协议,需要校准 #1.1.2、One Shot 125协议,速率更快 #1.1.3、DShot ,减少延迟,无需校准 #1.1.4、无人机CAN 2、PWM 伺服系统和 ESC(电机控…...
LeadeRobot具身智能应用标杆:无人机X柔韧具身智能,空中精准作业游刃有余
当前,具身智能已成为全球科技领域的前沿焦点,更受到国家战略级重视,吸引科技产业巨头抢滩布局。但同时,具身智能的商业化路径、规模化应用场景、技术成本等难题也开始在资本界与产业圈引起广泛讨论。 目前,万勋科技基于Pliabot 柔韧技术已推出多款具身智能柔韧机器人产品,在柔…...
WebSocket:实现实时双向通信的技术
WebSocket是一种网络通信协议,它在单个TCP连接上提供全双工通信。WebSocket协议在2011年被IETF(互联网工程任务组)标准化为RFC 6455,并由W3C(万维网联盟)制定了WebSocket API标准,使得客户端&am…...
探索 HumanoidBench:类人机器人学习的新平台
在科技飞速发展的当下,类人机器人逐渐走进我们的视野,它们有着和人类相似的外形,看起来能像人类一样在各种环境里完成复杂任务,潜力巨大。但实际上,让类人机器人真正发挥出实力,还面临着重重挑战。 这篇文…...
「数据可视化 D3系列」入门第十一章:力导向图深度解析与实现
D3.js 力导向图深度解析与实现 力导向图核心概念 力导向图是一种通过物理模拟来展示复杂关系网络的图表类型,特别适合表现社交网络、知识图谱、系统拓扑等关系型数据。其核心原理是通过模拟粒子间的物理作用力(电荷斥力、弹簧引力等)自动计…...
「数据可视化 D3系列」入门第八章:动画效果详解(让图表动起来)
动画效果详解 一、D3.js动画核心API1. d3.transition()2. transition.duration()3. transition.delay()4. 其他重要API 二、动画实现原理三、完整动画示例解析1. 柱状图生长动画2. 文本跟随动画 四、动画效果优化技巧1. 缓动函数选择:2. 组合动画:3. 动画…...
index: 自动化浏览器智能体
GitHub:https://github.com/lmnr-ai/index 更多AI开源软件:https://www.aiinn.cn/ 在做浏览器自动化脚本时,我们常常需要编写大量代码来处理复杂的网页交互,不仅耗时耗力,还难以调试和优化,要是出错更是难以…...
网页端调用本地应用打开本地文件(PDF、Word、excel、PPT)
一、背景原因 根据浏览器的安全策略,在网页端无法直接打开本地文件,所以需要开发者曲线救国。 二、实现步骤 前期准备: 确保已安装好可以打开文件的应用软件,如,WPS; 把要打开的文件统一放在一个文件夹&am…...
如何批量在多个 Word 文档末尾添加广告页面
Word是我们日常使用非常频繁的文档编辑软件,凭借其强大的文本处理功能,如文字输入、格式设置、段落排版、图片插入等,可以帮助我们轻松创建专业且美观的文档。不过呢当我们需要将这些文档分享给他人时,往往需要在每个文档的末尾添…...
JavaScript原生实现简单虚拟列表
旧笔记,最近使用时做了点新优化,之前只发在了个人博客上 地址:JavaScript原生实现简单虚拟列表 背景 在公司项目中,需要给商品配置大量的属性值,可能其中一个属性的值数量就有成百上千条。 一个商品会有很多属性&…...
安心联车辆管理平台应用前景分析
安心联车辆管理平台凭借其技术创新与行业适配能力,展现出广阔的应用前景。以下从技术驱动、行业覆盖、实际效益、市场策略及未来潜力五个维度进行分析: 一、技术驱动的核心竞争力 高精度定位与多传感器融合 安心联采用北斗/GPS双模定位技术,实…...
力扣每日打卡 2176. 统计数组中相等且可以被整除的数对(简单)
力扣 2176. 统计数组中相等且可以被整除的数对 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解官方也是暴力解法 前言 这是刷算法题的第十三天,用到的语言是JS 题目:力扣 2176. 统计数组中相等且可以被整除的数对(简单) 一、题目内容 给你一…...