Selenium WebDriver提供By.CSS_SELECTOR定位元素方法

`By.CSS_SELECTOR` 是 Selenium WebDriver 提供的一种定位元素的方法,它允许使用 CSS 选择器来定位页面上的元素。以下是常见的 CSS 选择器语法:

1. **标签选择器(Tag Selector)**:通过元素的标签名选择元素。
   - 示例:`p` 选取所有 p 标签的元素。

2. **类选择器(Class Selector)**:通过元素的类名选择元素。
   - 示例:`.container` 选取所有类名为 container 的元素。

3. **ID 选择器(ID Selector)**:通过元素的 ID 属性选择元素。
   - 示例:`#my_div` 选取 ID 属性为 my_div 的元素。

4. **属性选择器(Attribute Selector)**:根据元素的属性值选择元素。
   - 示例:`[name='username']` 选取所有 name 属性值为 username 的元素。

5. **子元素选择器(Child Selector)**:选择指定元素的直接子元素。
   - 示例:`div > p` 选取所有直接子元素为 div 的 p 元素。

6. **后代元素选择器(Descendant Selector)**:选择指定元素的后代元素。
   - 示例:`div p` 选取所有 div 元素下的 p 元素。

7. **相邻兄弟选择器(Adjacent Sibling Selector)**:选择指定元素的相邻兄弟元素。
   - 示例:`h2 + p` 选取紧跟在 h2 元素后的第一个 p 元素。

8. **通用兄弟选择器(General Sibling Selector)**:选择指定元素的所有兄弟元素。
   - 示例:`h2 ~ p` 选取紧跟在 h2 元素后的所有 p 元素。

9. **伪类选择器(Pseudo-class Selector)**:根据元素的状态或位置选择元素。
   - 示例:`:hover` 选取鼠标悬停在元素上的状态。:nth-child(n) 选取父元素的第 n 个子元素。

10. **伪元素选择器(Pseudo-element Selector)**:选择元素的特定部分。
    - 示例:`::before` 选取元素的前面生成的内容。::after 选取元素的后面生成的内容。

11. **属性存在选择器:选择具有指定属性的元素。
    - 示例:input[type] 选取所有具有 type 属性的 input 元素。

以上是一些常见的 CSS 选择器语法,结合使用它们可以实现灵活且精准的元素定位。

`By.CSS_SELECTOR` 定位元素并模拟用户与页面元素的交互的完整示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 打开页面
driver.get("data:text/html;charset=utf-8," + """
<div id="my_div" class="container"><H4>type、press 和 check 方法来模拟用户与页面元素的交互操作</H4><p>Paragraph 1</p><p>Paragraph 2</p><p>Paragraph 3</p><label for="my_input">my_input :<input type="text" id="my_input"></label><BR><BR><button id="my_button">Click Me</button><input type="checkbox" id="my_checkbox"><form action="/submit"><!-- 复选框 --><label for="checkbox1">选项1:</label><input type="checkbox" id="checkbox1" name="option1" value="Option 1"><label for="checkbox2">选项2:</label><input type="checkbox" id="checkbox2" name="option2" value="Option 2"><!-- 下拉框 --><label for="dropdown">选择一项:</label><select id="dropdown" name="dropdown"><option value="option1">选项1</option><option value="option2">选项2</option><option value="option3">选项3</option></select><input type="submit" value="提交"></form>
</div>
""")# 使用 CSS 选择器定位元素并模拟用户与页面元素的交互
# 输入文本
driver.find_element(By.CSS_SELECTOR, "input#my_input").send_keys("Hello, World!")# 点击按钮
driver.find_element(By.CSS_SELECTOR, "button#my_button").click()# 勾选复选框
driver.find_element(By.CSS_SELECTOR, "input#my_checkbox").click()# 选择下拉框选项
driver.find_element(By.CSS_SELECTOR, "select#dropdown option[value='option2']").click()# 提交表单
driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()time.sleep(5)
# 关闭浏览器
driver.quit()# find_element(by, value) 方法是 WebDriver 类对象中用于查找单个页面元素的方法。它接受两个参数:
# by: 指定定位元素的方法,可以是以下之一:
# By.ID: 使用元素的 id 属性来定位。
# By.NAME: 使用元素的 name 属性来定位。
# By.XPATH: 使用 XPath 表达式来定位。
# By.LINK_TEXT: 使用链接文本来定位 <a> 元素。
# By.PARTIAL_LINK_TEXT: 使用部分链接文本来定位 <a> 元素。
# By.TAG_NAME: 使用标签名称来定位。
# By.CLASS_NAME: 使用 class 属性来定位。
# By.CSS_SELECTOR: 使用 CSS 选择器来定位。
# value: 定位方法对应的值,即要定位的元素的具体标识信息。
# 该方法会返回匹配的第一个元素,如果找不到匹配的元素,会抛出 NoSuchElementException 异常。# `By.CSS_SELECTOR` 是 Selenium WebDriver 提供的一种定位元素的方法,它允许使用 CSS 选择器来定位页面上的元素。
# 以下是常见的 CSS 选择器语法:
# 1. **标签选择器(Tag Selector)**:通过元素的标签名选择元素。
#    - 示例:`p` 选取所有 p 标签的元素。
# 2. **类选择器(Class Selector)**:通过元素的类名选择元素。
#    - 示例:`.container` 选取所有类名为 container 的元素。
# 3. **ID 选择器(ID Selector)**:通过元素的 ID 属性选择元素。
#    - 示例:`#my_div` 选取 ID 属性为 my_div 的元素。
# 4. **属性选择器(Attribute Selector)**:根据元素的属性值选择元素。
#    - 示例:`[name='username']` 选取所有 name 属性值为 username 的元素。
# 5. **子元素选择器(Child Selector)**:选择指定元素的直接子元素。
#    - 示例:`div > p` 选取所有直接子元素为 div 的 p 元素。
# 6. **后代元素选择器(Descendant Selector)**:选择指定元素的后代元素。
#    - 示例:`div p` 选取所有 div 元素下的 p 元素。
# 7. **相邻兄弟选择器(Adjacent Sibling Selector)**:选择指定元素的相邻兄弟元素。
#    - 示例:`h2 + p` 选取紧跟在 h2 元素后的第一个 p 元素。
# 8. **通用兄弟选择器(General Sibling Selector)**:选择指定元素的所有兄弟元素。
#    - 示例:`h2 ~ p` 选取紧跟在 h2 元素后的所有 p 元素。
# 9. **伪类选择器(Pseudo-class Selector)**:根据元素的状态或位置选择元素。
#    - 示例:`:hover` 选取鼠标悬停在元素上的状态。:nth-child(n) 选取父元素的第 n 个子元素。
# 10. **伪元素选择器(Pseudo-element Selector)**:选择元素的特定部分。
#     - 示例:`::before` 选取元素的前面生成的内容。::after 选取元素的后面生成的内容。
# 11. **属性存在选择器:选择具有指定属性的元素。
#     - 示例:input[type] 选取所有具有 type 属性的 input 元素。# 以上是一些常见的 CSS 选择器语法,结合使用它们可以实现灵活且精准的元素定位。

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

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

相关文章

【入门】保研/考研408机试-基本知识点(输入/出、基本数学、字符串)

目录 一、基础结构方面 1.1调用标准库* 1.2输入输出方面 1.2.1保留几位小数输出* 1.2.2字符/字符串* 1.2.3输入n个数&#xff08;循环用&#xff09; 1.3i和i 二、数学方面 2.1绝对值 2.2幂次方 2.3取整问题 2.4涉及分数计算 三、字符串方面 3.1字符比较 例题&…

Linux中的音频开发

在Linux环境下进行音频开发&#xff0c;你可能会面临多种挑战和任务&#xff0c;从基础的音频播放和录制到复杂的音频处理和流媒体传输。以下是一些音频开发课题和建议&#xff1a; ### 题目1&#xff1a;基础音频播放 **描述**&#xff1a;开发一个简单的命令行应用程序&…

矩阵消元-MIT

文章目录 1. 行变换消元法 1. 行变换消元法 假设我们有一个方程组表示如下&#xff1a; x 2 y z 2 ; 3 x 8 y z 12 ; 4 y z 2 (1) x2yz2;\quad 3x8yz12;\quad4yz2\tag{1} x2yz2;3x8yz12;4yz2(1)矩阵表示如下&#xff1a; [ 1 2 1 3 8 1 0 4 1 ] → [ 1 2 1 0 2 − 2…

【分布式websocket 】前端vuex管理客户端消息crud!使用localStorage来存储【第19期】

前言 聊天系统客户端是要存储消息的&#xff0c;因为所有所有的历史消息都从服务器拉的话一方面服务器压力大&#xff0c;另一方面也耗费用户流量。所以客户端存储消息是势在必行的。如何存储呢上一篇文章也写了&#xff0c;大概就是浏览器的话是localStorage或者IndexedDB。然…

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下&#xff1a; [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

JavaScript面向对象详解(一)

一. JavaScript的对象 传统的面向对象 面向对象语言的一个标志就是类类是所有对象的统称, 是更高意义上的一种抽象. 对象是类的实例.通过类我们可以创建任意多个具体的对象. 在学习C/OC/Java/Python等编程语言的时候, 都可以按照这种方式去创建类和对象.JavaScript的面向对象…

(四)Android布局类型(线性布局LinearLayout)

线性布局&#xff08;LinearLayout&#xff09;&#xff1a;按照一定的方向排列组件&#xff0c;方向主要分为水平方向和垂直方向。方向的设置通过属性android:orientation设置 android:orientation 其取值有两种 水平方向&#xff1a;android:orientation"horizontal&…

Lua-Lua与C的交互3

Lua与C的交互是指在Lua脚本中调用C语言编写的函数或者在C语言中调用Lua脚本中定义的函数。这种交互可以实现Lua和C语言之间的数据传递和函数调用。 Lua提供了一组API函数&#xff0c;可以在C语言中使用这些函数来与Lua进行交互。通过这些API函数&#xff0c;C语言可以将数据传…

Java中如何解决if-else(策略+枚举)

最近接到了一个新需求&#xff0c;按照不同的编码去执行不同的逻辑&#xff0c;但最后返回的数据类型是一致的&#xff0c;都是相同对象的List集合。 完成这个需求的话可以使用if-else来执行不同的方法&#xff0c;虽然if-else可以实现&#xff0c;但if-else是一种面向过程的实…

MongoDB——linux中yum命令安装及配置

一、创建mongodb-org-3.4.repo文件 vi /etc/yum.repos.d/mongodb-org-3.4.repo 将下面内容添加到创建的文件中 [mongodb-org-3.4] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www…

本地用AIGC生成图像与视频

最近AI界最火的话题&#xff0c;当属Sora了。遗憾的是&#xff0c;Sora目前还没开源或提供模型下载&#xff0c;所以没法在本地跑起来。但是&#xff0c;业界有一些开源的图像与视频生成模型。虽然效果上还没那么惊艳&#xff0c;但还是值得我们体验与学习下的。 Stable Diffu…

Ubuntu Linux - Primavera P6 EPPM 安装及分享

引言 根据计划&#xff0c;近日我制作了基于Ubuntu Linux 的P6虚拟机环境&#xff0c;同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primavera销售代表取得联系&#xff0c;以获取所需的应…

无人机助力智慧农田除草新模式,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的农田杂草检测识别系统

科技发展到今天&#xff0c;无人机喷洒药物已经不是一件新鲜事情了&#xff0c;在很多高危的工作领域中&#xff0c;比如高空电力设备除冰&#xff0c;电力设备部件传送更换等等&#xff0c;无人机都可以扮演非常出色的作用&#xff0c;前面回到老家一段时间&#xff0c;最近正…

吴恩达deeplearning.ai:使用多个决策树随机森林

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 为什么要使用树集合使用多个决策树(Tree Ensemble)有放回抽样随机森林XGBoost(eXtream Gradient Boosting)XGBoost的库实现何时使用决策树决策树和树集合神经网络 使用单个决策树的…

数据预处理在数据挖掘中的重要性

数据挖掘作为从大量数据中提取有用信息和知识的过程&#xff0c;其结果的准确性和可靠性直接受到数据质量的影响。因此&#xff0c;数据预处理在数据挖掘中扮演着至关重要的角色。让我们探讨数据质量对数据挖掘结果的影响&#xff0c;并介绍常见的数据预处理方法以及它们如何提…

2024.3.14每日一题

LeetCode 合并数组中的最大元素 题目链接&#xff1a;2789. 合并后数组中的最大元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个下标从 0 开始、由正整数组成的数组 nums 。 你可以在数组上执行下述操作 任意 次&#xff1a; 选中一个同时满足 0 < i …

【开源】SpringBoot框架开发房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…

短视频矩阵系统/短视频矩阵系统技术saas研发

短视频矩阵系统SaaS研发是一个复杂且需要技术专业知识的工作。以下是一些关键步骤和建议&#xff0c;帮助你开发一个成功的短视频矩阵系统SaaS&#xff1a; 1. 明确需求&#xff1a;首先&#xff0c;你需要明确你的短视频矩阵系统的具体需求&#xff0c;例如用户规模、视频内容…

力扣100热题:两、三、四数之和,哈希+数组+双指针+排序

目录 一、两数之和 二、两数之和 II - 输入有序数组 三、两数之和 III - 数据结构设计 四、两数之和 IV - 输入 BST&#xff08;二叉搜索树&#xff09; 五、三数之和 六、四数之和 一、两数之和 题目&#xff1a;1. 两数之和 参考力扣题解&#xff1a;. - 力扣&#x…

数据库——书籍+内容0.1版本

背景&#xff1a;将一本书&#xff0c;存入我们的数据库中&#xff0c;并可以查出来 采用&#xff1a;第三范式&#xff08;3NF&#xff09;设计模式 设计数据库模板 第一范式&#xff08;1NF&#xff09;&#xff1a;确保表的每一列都是不可分割的原子数据项。 第二范式&…