selenium----CSS表达式选择元素

前面我们学习了根据 id、class属性、tag名 选择元素。

如果我们要选择的 元素 没有id、class 属性,或者有些我们不想选择的元素 也有相同的 id、class属性值,怎么办呢?这时候我们通常可以通过 CSS selector 语法选择元素。

选择元素

通过 CSS Selector 选择单个元素的方法是

find_element(By.CSS_SELECTOR, CSS Selector参数)

选择所有元素的方法是

find_elements(By.CSS_SELECTOR, CSS Selector参数)

根据tag、id、class选择元素

elements = wd.find_elements(By.CSS_SELECTOR, 'div')

等价于之前学习过的

elements = wd.find_elements(By.TAG_NAME, 'div')

根据id属性 选择元素的语法是在id号前面加上一个井号: #id值

element = wd.find_element(By.CSS_SELECTOR, '#searchtext')

选择子元素和后代元素

HTML中, 元素 内部可以 包含其他元素, 比如 下面的 HTML片段

<div id='container'><div id='layer1'><div id='inner11'><span>内层11</span></div><div id='inner12'><span>内层12</span></div></div><div id='layer2'><div id='inner21'><span>内层21</span></div></div></div>

id 为 container 的div元素 包含了 id 为 layer1 和 layer2 的两个div元素。这是他的直接子元素。而id=inner11这种属于是后代元素,就是说,与最上面的元素不管隔了几层,都属于后代元素。

选择子元素

 如果 元素2 是 元素1 的 直接子元素, CSS Selector 选择子元素的语法是这样的

元素1 > 元素2

给浏览器传过去之后,就告诉浏览器找到元素2

选择后代元素

如果 元素2 是 元素1 的 后代元素, CSS Selector 选择后代元素的语法是这样的

元素1   元素2

中间有一个空格。

选择其他属性

<a href="http://www.miitbeian.gov.cn">苏ICP备88885574号</a>

css 选择器支持通过任何属性来选择元素,语法是用一个方括号 [] 

比如要选择上面的a元素,就可以使用 [href="http://www.miitbeian.gov.cn"] 

这个表达式的意思是,选择 属性href值为 http://www.miitbeian.gov.cn 的元素

# 根据属性选择元素
element = wd.find_element(By.CSS_SELECTOR, '[href="http://www.miitbeian.gov.cn"]')
# 根据属性选择元素
element = wd.find_element(By.CSS_SELECTOR, '[href]')

验证CSS  Selector

怎么验证 CSS Selector 的语法是否正确选择了我们要选择的元素呢?

写出Python代码,运行看看,能否操作成功.

在测试网站中点击ctrl+F,然后出现搜索框,上面写上你需要找到的元素,如果你的写法是错误的,就不会有高亮地方提示,说明,你的写法是错的,就不用再去python里面执行了,这时候你就再在这个搜索框里把这个元素写对就好了。

比如说我上面一开始写#footer1 span,找不到元素,所以我后面改成了.footer1 span。

其他选择元素写法

如果要选择两种,比如说我要选择植物和动物:.plant,.animal。中间用逗号隔开。

根据次序选择子元素-父元素的第n个子节点

    <body>  <div id='t1'><h3> 唐诗 </h3><span>李白</span><p>静夜思</p><span>杜甫</span><p>春夜喜雨</p>              </div>      <div id='t2'><h3> 宋词 </h3><span>苏轼</span><p>赤壁怀古</p><p>明月几时有</p><p>江城子·乙卯正月二十日夜记梦</p><p>蝶恋花·春景</p><span>辛弃疾</span><p>京口北固亭怀古</p><p>青玉案·元夕</p><p>西江月·夜行黄沙道中</p></div>             </body>

我们可以指定选择的元素 是父元素的第几个子节点

使用 nth-child

比如,我们要选择 唐诗 和宋词 的第一个 作者,也就是说 选择的是 第2个子元素,并且是span类型所以这样可以这样写 span:nth-child(2) ,如果你不加节点类型限制,直接这样写 :nth-child(2)就是选择所有位置为第2个的所有元素,不管是什么类型。

父元素的倒数第n个子节点

选择的是父元素的 倒数第几个子节点 ,使用 nth-last-child

p:nth-last-child(1) 

就是选择第倒数第1个子元素,并且是p元素。

父元素的某类型第几个的子节点

我们要选择 唐诗 和宋词 的第一个 作者,

可以像上面那样思考:选择的是 第2个子元素,并且是span类型

 span:nth-child(2)。

还可以这样思考,选择的是 第1个span类型 的子元素

所以也可以这样写 span:nth-of-type(1)。

父元素的倒数第几个某类型的子节点

当然也可以反过来, 选择父元素的 倒数第几个某类型 的子节点

使用 nth-last-of-type

像这样

p:nth-last-of-type(2)

奇数节点和偶数节点

如果要选择的是父元素的 偶数节点,使用 nth-child(even)

比如

p:nth-child(even)

如果要选择的是父元素的 奇数节点,使用 nth-child(odd)

p:nth-child(odd)

 兄弟节点选择

就是选择 h3 后面紧跟着的兄弟节点 span。

这就是一种 相邻兄弟 关系,可以这样写 h3 + span

表示元素 紧跟关系的 是 加号。这是选择紧跟着的那个元素。

如果要是选择所有的span,有的span不是紧跟着h3,这样的话怎么做?

 h3 ~ span可以这样写。

如果选择id为ti的里面的span:#id h3~span。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

22.jdk源码阅读之Thread(上)

1. 写在前面 Java 中的 Thread 类是多线程编程的基础&#xff0c;也是我们日常工作中用的比较多的类&#xff0c;但是你真的了解它吗&#xff1f;下面这几个问题你是否有思考过&#xff1f; start() 和 run() 方法有什么区别&#xff1f;什么是线程的生命周期&#xff1f;什么…

邮件攻击案例系列三:动态 IP 池爆破员工邮箱钓鱼重要客户

案例描述 2023 年 11 月&#xff0c;某制造业企业员工 Emily 接到海外客户电话&#xff0c;向其核实一封电子邮件的真实性&#xff0c;因为客户认为&#xff0c;该邮件所给出的链接不像是该公司的官网网址。Emily 查看自己的邮箱&#xff0c;并未发现客户所说的邮件。但从客户…

RPA:如何一次回答多个问题

洞悉技术的本质&#xff0c;享受科技的乐趣 先完成10%目标&#xff0c;迈出100%之一行动 2分钟的努力也有价值 从每天解决1个小问题开始。 本文介绍如何使用playwright来处理新页面 三句话说清楚问题 一天回答一个问题太慢了&#xff0c;我想一天回答 3个问题 了解基本原理 新页…

YOLOv5改进 | 卷积模块 | 即插即用的递归门控卷积gnConv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

概率模拟(sigmoid、softmax)

概率模拟&#xff08;sigmoid、softmax&#xff09; 1. sigmoid1.1 sigmoid 定义1.2 sigmoid 主要特性1.3 sigmoid 的缺点1.4 代码画 sigmoid 函数图像 2. softmax2.1 softmax 定义与原理2.2 softmax 特点与优势2.3 softmax 应用场景2.4 softmax 实现方式2.5 softmax 注意事项2…

C++从入门到起飞之——友元内部类匿名对象 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、友元 2、内部类 3. 匿名对象 4、完结散花 1、友元 • 友元提供了⼀种突破类访问限定符封装的…

在 Jetpack Compose 中使用 CameraX示例

在使用Jetpack Compose开发安卓应用&#xff0c;当在学习使用CameraX组件时发现官方提供的教程不是Compose的。教程地址如下&#xff1a; https://developer.android.com/codelabs/camerax-getting-started?hlzh-cn#1 与是我就记录一下&#xff0c;简单的示例。 内容参考&…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译&#xff08;按照Token进行划分&#xff09;。 但是不论长文本翻译还是短文本翻译&#xff0c;总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

基于JSP的电子商城系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaB/S架构 工具&#xff1a;Eclipse、Tomcat 系统展示 首页 管理员功能界面 用户功能界面 医…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

项目管理工具-Maven-创建一个mavenweb项目

文章目录 IDEA开发maven项目依赖范围 IDEA开发maven项目 点击NewProject&#xff0c;填写项目名字Name为javaWeb-maven&#xff0c;填写项目的存储地址&#xff0c;选择Archetype为org.apache.maven.archetypes:maven-archetype-webapp&#xff0c;然后再点击Create&#xff0…

Android WebViewClient 的 `shouldOverrideUrlLoading` 方法

简介 在Android开发中&#xff0c;WebView是一个强大的工具&#xff0c;可以在你的应用中显示网页内容。了解 WebViewClient 中的 shouldOverrideUrlLoading 方法是至关重要的&#xff0c;因为这个方法允许你控制 URL 在 WebView 中的处理方式。 在本文中&#xff0c;我们将详…

基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节

目录 1、视频播放器原理 2、FFMPEG解码 2.1 FFMPEG库 2.2、数据类型 2.3、解码 2.3.1、接口函数 2.3.2、解码流程 3、SDL播放 3.1、接口函数 3.2、视频播放 3.3、音频播放 4、音视频的同步 4.1、获取音频的播放时间戳 4.2、获取当前视频帧时间戳 4.3、获取视…

OZON打开哈萨克斯坦市场,OZON测试开通哈萨克斯坦市场中国产品

在全球化日益深入的今天&#xff0c;跨境电商成为了连接不同国家和地区消费者的重要桥梁。2024年7月26日&#xff0c;Ozon Global宣布了一项重大扩展计划&#xff0c;正式将中国卖家的销售版图拓展至哈萨克斯坦市场&#xff0c;为中国企业打开了新的增长机遇之门。 OZON哈萨克斯…

实现共模噪声电流相互抵消的方法

共模传导路径中噪声电流相互抵消&#xff0c;从而使总的共模电流减小&#xff0c; 终达到降噪的目的。目前为实现共模噪声电流相互抵消&#xff0c;主要是采用动点电容抵消法。 动点电容抵消法原理 动点电容抵消法就是选取合适的动点&#xff0c;添加原副边跨接电容&#xff0c…

【Leetcode】二十、记忆化搜索:零钱兑换

文章目录 1、记忆化搜索2、leetcode509&#xff1a;斐波那契数列3、leetcode322&#xff1a;零钱兑换 1、记忆化搜索 也叫备忘录&#xff0c;即把已经计算过的结果存下来&#xff0c;下次再遇到&#xff0c;就直接取&#xff0c;不用重新计算。目的是以减少重复计算。 以前面提…

深度强化学习 ②(DRL)

参考视频&#xff1a;&#x1f4fa;王树森教授深度强化学习 前言&#xff1a; 最近在学习深度强化学习&#xff0c;学的一知半解&#x1f622;&#x1f622;&#x1f622;&#xff0c;这是我的笔记&#xff0c;欢迎和我一起学习交流~ 这篇博客目前还相对比较乱&#xff0c;后面…

【算法刷题】【力扣】| 最长回文子串|

给你一个字符串 s&#xff0c;找到 s 中最长的 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd" 输出&#x…

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码&#xff08;Sign-Magnitude&#xff09;2. 反码&#xff08;Ones Complement&#xff09;3. 补码&#xff08;Twos Complement&#xff09;4. 浮点数&#xff08;Floating Point&#xff09;a.常用的浮点数标准--IEEE 754(FP32…

如何利用业余时间做副业,在家里赚钱,来增加收入

人一生每个阶段都会有压力和烦恼&#xff0c;中年人更是如此。 上有老下有小&#xff0c;生活的重担都在一个人身上&#xff0c;压得人喘不过气&#xff0c;这些都需要钱&#xff0c;仅靠工资已经很难维持一家人的开支了。 所以很多人打算利用业余时间做副业&#xff0c;来增加…