当前位置: 首页 > news >正文

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。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PDF解锁网站
  • 数据库DDL | 增 删 改 操作 | 对数据库数据表
  • 【Java基础语法】字符修改,以及equals的用法
  • JS逆向高级爬虫
  • 【BUG】已解决:ERROR: Failed building wheel for jupyter-nbextensions-configurator
  • 【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap
  • Python3网络爬虫开发实战(4)数据的存储
  • [Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升
  • 【MQTT(4)】开发一个客户端,QT-Android安卓手机版本,Mosquitto替换成libhv库
  • PHP Switch 语句
  • 跨越平台的智能:Mojo模型的自定义与动态部署
  • Vue.js 2 项目实战(五):水果购物车
  • 德国云手机:企业移动办公解决方案
  • transformers进行学习率调整lr_scheduler(warmup)
  • 【详细的springboot自动装载原理】
  • 【Leetcode】101. 对称二叉树
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • CSS 专业技巧
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Java面向对象及其三大特征
  • LeetCode29.两数相除 JavaScript
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PermissionScope Swift4 兼容问题
  • React as a UI Runtime(五、列表)
  • Spring-boot 启动时碰到的错误
  • SSH 免密登录
  • vue中实现单选
  • 前端代码风格自动化系列(二)之Commitlint
  • 树莓派 - 使用须知
  • 与 ConTeXt MkIV 官方文档的接驳
  • $NOIp2018$劝退记
  • (12)Hive调优——count distinct去重优化
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (C++17) optional的使用
  • (Forward) Music Player: From UI Proposal to Code
  • (js)循环条件满足时终止循环
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (每日一问)基础知识:堆与栈的区别
  • (区间dp) (经典例题) 石子合并
  • (三)Honghu Cloud云架构一定时调度平台
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (一) 初入MySQL 【认识和部署】
  • (杂交版)植物大战僵尸
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(一):@echo off
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .NET开发人员必知的八个网站
  • .NET使用存储过程实现对数据库的增删改查