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

news2024/11/23 18:05:40

前面我们学习了根据 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://www.coloradmin.cn/o/1953375.html

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

相关文章

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的!

我澄清下&#xff0c;大数据界面虽然有点花&#xff0c;但对趋势的判断还是很准的&#xff01; 艾斯视觉的观点认为&#xff1a;在这个充满不确定性的世界里&#xff0c;大数据就像一位智者&#xff0c;透过那些令人眼花缭乱的界面&#xff0c;总能以它独到的洞察力&#xff0…

大学计算机专业主要课程及概要介绍

大学计算机专业主要课程及概要介绍 大学计算机专业是一门涵盖广泛领域的学科&#xff0c;旨在培养学生在计算机科学与技术方面的理论知识与实践能力。该专业课程设置丰富多样&#xff0c;涵盖了从基础理论到高级应用的多个方面。以下是一些主要的课程及其概要介绍&#xff1a;…

C语言的周末小练习

周末小练习&#xff1a; 1.确认基础类型所占用的内存空间。 #include <stdio.h>int main() {printf("char: %u byte(s)\n", sizeof(char));printf("short: %u byte(s)\n", sizeof(short));printf("int: %u byte(s)\n", sizeof(int));pr…

【Maven学习】-1. 简介

文章目录 Maven学习1. 简介1.1 介绍1.2 安装1.2.1 下载1.2.2 安装maven1.2.3 配置镜像源(加快下载)1.2.4 IDEA配置maven 1.3 基于IDEA进行Maven工程构建Maven工程的GAVP创建Maven工程项目结构说明 1.4 Maven生命周期1.4.1 介绍1.4.2 命令讲解编译(mvn compile)删除(mvn clean)测…

26 Python序列结构

Python 中常用的序列结构有列表、元组、字典、字符串、集合等。 从是否有序这个角度看&#xff0c;Python 序列可以分为有序序列和无序序列&#xff1b;从是否可变来看&#xff0c;Python 序列可以分为可变序列和不可变序列两大类。 生成器对象和 range、map、enumerate、filte…

libtorch学习历程(1)环境搭建:VS+libtorch

1. 开发环境 Win11VS 2022 CommunityRTX4060pytorch 2.4.0cu121&#xff08;事先安装好&#xff09;libtorch 2.4.0cu121 release版opencv 4.10.0 2.软件下载 2.1 VS 直接去官网下载即可&#xff0c;最好是2017版本之后&#xff0c;需要选择C的桌面开发。 2.1 opencv 下…

嵌入式人工智能(30-基于树莓派4B的气体传感器-MQ系列烟雾、酒精、空气质量等传感器)

1、气体传感器 气体传感器是一种用于检测和测量空气中各种气体浓度的设备。它们通常使用化学反应、光学原理或电化学原理来检测气体&#xff0c;并通过输出电信号或其他输出形式来指示测量结果。 气体传感器在许多领域都有应用&#xff0c;包括工业安全、环境监测、室内空气质…

photoshop学习笔记——移动工具

移动工具&#xff0c;可以对图层进行移动&#xff0c;快捷键 V 使用的素材已经放上了&#xff0c;直接下载即可 按住ctrl 可以自动选取&#xff0c;鼠标点击哪个对象&#xff0c;自动选中哪个图层 按住 shift 校正角度&#xff08;只能沿着直线移动&#xff09; 按住 alt 拖…

第 1 章 预备知识

1、C简介 C继承了 C 语言高效、简洁、快速和可移植性的传统。C面向对象的特性带来了全新的编程方法&#xff0c;这种方法是为应付复杂程度不断提高的现代编程任务而设计的。 C的模板特性提供了另一种全新的编程方法——泛型编程。 C融合了 3 种不同的编程方式&#xff1a;C …

请你谈谈:spring bean的生命周期 - 阶段5:BeanPostProcessor前置处理-自定义初始化逻辑-BeanPostProcess后置处理

BeanPostProcessor的postProcessBeforeInitialization方法是在bean的依赖注入&#xff08;即属性填充&#xff09;完成后&#xff0c;但在bean的初始化回调&#xff08;如PostConstruct注解的方法或InitializingBean接口的afterPropertiesSet方法&#xff09;之前被调用的。 具…

大模型算法备案各项要求详细说明

2024年3月1日&#xff0c;我国通过了《生成式人工智能服务安全基本要求》&#xff08;以下简称《AIGC安全要求》&#xff09;&#xff0c;这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件&#xff0c;对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面…

Windows按钮快捷键解释(有摸鱼技巧!):(个人尝试)另外警告:仅代表UP建议,不一定适用于所有电脑!谨慎尝试哦~好好工作!杜绝摸鱼!引以为戒!

哈喽&#xff01;各位好&#xff0c;我们来一期电脑专题的&#xff08;快捷键&#xff09;第一次尝试&#xff0c;你们看看吧&#xff01; 警告&#xff1a;仅代表UP建议&#xff0c;不一定适用于所有电脑&#xff01;谨慎尝试哦~好好工作&#xff01;杜绝摸鱼&#xff01; 一…

HarmonyOs之 路由简单跳转

Navigation路由相关的操作都是基于页面栈NavPathStack提供的方法进行&#xff0c;每个Navigation都需要创建并传入一个NavPathStack对象&#xff0c;用于管理页面。主要涉及页面跳转、页面返回、页面替换、页面删除、参数获取、路由拦截等功能。 Entry Component struct Index …

算法通关:006_3二分查找:查找数组中<=num 最右边的值

文章目录 说明主要代码全部代码运行结果 说明 大于等于最右不考&#xff0c;意义不大。 直接看&#xff08;arr.length-1&#xff09; 位&#xff08;即数组最后一位&#xff09;&#xff0c;如果大于num&#xff0c;那就说明arr[arr.length-1]是大于等于最右的数字数组最后一…

【视频讲解】ResNet深度学习神经网络原理及其在图像分类中的应用|附Python代码

全文链接&#xff1a;https://tecdat.cn/?p37134 原文出处&#xff1a;拓端数据部落公众号 分析师&#xff1a;Canglin Li 本文深入探讨了卷积层&#xff08;Convolutional Layer&#xff09;在深度学习框架中的核心作用与操作机制&#xff0c;并分析了其在特征提取、网络构…

学习记录701@org.hibernate.MappingException: No Dialect mapping for JDBC

使用spring data jpa 时报错&#xff1a;javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 0。 但是在数据库中sql是可以执行的。 我是用的是原生查询&#xff1a; Query query entityManager.createNativeQuer…

ElasticSearch(七)— 相关性检索和组合查询

一、 相关性评分 全文检索与数据库查询的一个显著区别&#xff0c; 就是它并不一定会根据查询条件 做完全精确的匹配。除了模糊查询以外&#xff0c;全文检索还会根据查询条件给文档的相关性打分并排序&#xff0c;将那些与查询条件相关性高的文档排在最前面。 相关性( Relev…

计算机二级题--结构体及链表 章节

之前写的有结构体全部的知识点&#xff0c;这一篇主要针对计算机二级真题的整理。 需要备考计算机二级的小伙伴们先收藏起来吧。整理不易&#xff0c;不过有帮助记得点赞哦 高频考点&#xff08;容易出错&#xff0c;附有例题&#xff09; 1.结构体传参&#xff0c;传值的区…

PyQt ERROR:ModuleNotFoundError: No module named ‘numpy‘

ERROR:ModuleNotFoundError: No module named numpy Solution:打开cmd,输入指令下载numpy库 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy//或者尝试这个指令 pip install numpy

C++学习 const相关

&#x1f914; 今天回顾C 时候 发现遇到关于const的变量类型&#xff08;底层const 顶层const 常量指针 指针常量 常量引用…&#xff09;又有点懵懵的了&#xff0c;然后又仔细复盘了一下 最后整理了一下 也方便记忆 文章目录 引入顶层const和底层const顶层const底层const 总结…