Selenium(五):CSS选择器(二)
1. CSS选择器
1.1 选择语法联合使用
CSS selector的另一个强大之处在于:选择语法可以联合使用。
html代码:
<div id='bottom'>
<div class='footer1'>
<span class='copyright'>版权</span>
<span class='date'>发布日期:2019-11-26</span>
</div>
<div class='footer2'>
<span>主页
<a href="https://www.cnblogs.com/liuhui0308/">爱编程的小灰灰</a>
</span>
</div>
</div>
比如,我们要选择网页html中的元素
<span class='copyright'>版权</span>
CSS selector表达式可以这样写:
div.footer1 > span.copyright
就是选择一个class属性值为copyright的span节点,并且要求其必须是class属性值为footer1的div节点 的子节点。
也可以更简单:
.footer1 > .copyright
就是选择一个class属性值为copyright的节点(不限类型),并且要求其必须是class属性值为footer1的节点的子节点。
当然这样也是可以的:
.footer1 .copyright
因为子元素同时也是后代元素。
1.2 组选择
如果我们要同时选择所有class为plant和class为animal的元素。怎么办?
这种情况,css选择器可以使用逗号,称之为组选择,像这样:
.raise , .wolf
再比如,我们要同时选择所有tag名为div的元素和id为BYHY的元素,就可以像这样写
div,#BYHY
对应的selenium代码如下:
elements = wd.find_elements_by_css_selector('div,#BYHY')
for element in elements:
print(element.text)
我们再看一个例子:
html代码:
<div id='t1'>
<h3> 唐诗 </h3>
<span>李白</span>
<p>静夜思</p>
<span>杜甫</span>
<p>春夜喜雨</p>
</div> <div id='t2'>
<h3> 宋词 </h3>
<span>辛弃疾</span>
<p>北固亭怀古</p>
</div>
我们要选择所有唐诗里面的作者和诗名,也就是选择所有id为t1里面的span和p元素。
我们是不是应该这样写呢?
#t1 > span,p
这样是不行的,这样写的意思是选择所有id为t1里面的span和所有的p元素。
只能这样写:
#t1 > span , #t1 > p
1.3 按次序选择子节点
html代码:
<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>
1.3.1 父元素的第n个子节点
我们可以指定选择的元素是父元素的第几个子节点,使用nth-child。
比如:
我们要选择唐诗和宋词的第一个作者,
也就是说选择的是第2个子元素,并且是span类型
所以这样可以这样写:
span:nth-child(2)
如果你不加节点类型限制,直接这样写:
:nth-child(2)
就是选择所有位置为第2个的所有元素,不管是什么类型。
1.3.2 父元素的倒数第n个子节点
也可以反过来,选择的是父元素的倒数第n个子节点,使用nth-last-child。
比如:
p:nth-last-child(1)
就是选择第倒数第1个子元素,并且是p元素。
1.3.3 父元素的第几个某类型的子节点
我们可以指定选择的元素是父元素的第几个某类型的子节点,使用nth-of-type。
比如:
我们要选择唐诗和宋词的第一个作者,可以像上面那样思考:选择的是第2个子元素,并且是span类型。
所以可以这样写:
span:nth-child(2)
还可以这样思考,选择的是第1个span类型的子元素。
所以也可以这样写:
span-nth-of-type(1)
1.3.4 父元素的倒数第几个某类型的子节点
当然也可以反过来,选择父元素的倒数第几个某类型的子节点,使用nth-last-of-type。
比如:
p:nth-last-of-type(2)
1.3.5 奇数节点和偶数节点
如果要选择的是父元素的偶数节点,使用nth-child(even)。
比如:
p:nth-child(even)
如果要选择的是父元素的奇数节点,使用nth-child(odd)
p:nth-child(odd)
如果要选择的是父元素的某类型偶数节点,使用nth-of-type(even)。
如果要选择的是父元素的某类型奇数节点,使用nth-of-type(odd)。
1.4 兄弟节点选择
1.4.1 相邻兄弟节点选择
上面的例子里面,我们要选择唐诗和宋词 的第一个作者
还有一种思考方法,就是选择h3后面紧跟着的兄弟节点span。
这就是一种相邻兄弟关系,可以这样写h3+span。
表示元素紧跟关系的是加号。
1.4.2 后续所有兄弟节点选择
如果要选择是选择h3后面所有的兄弟节点span,可以这样写h3 ~ span。
Selenium(五):CSS选择器(二)的更多相关文章
- selenium中CSS选择器定位
selenium元素定位,CSS选择器定位效率会高很多. CSS选择器用于选择你想要的元素的样式的模式.表格摘自“菜鸟教程”,具体用法可去查阅 选择器 示例 示例说明 CSS .class .intr ...
- css 选择器二
2.4 盒模型 2.4.1 定义 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型 ...
- Scrapy基础(五) ------css选择器基础
基本语法: * 选择所有节点#container 选择id为container的节点.container 选择所有class包含contai ...
- CSS的引入方式及CSS选择器
一 CSS介绍 现在的互联网前端分三层: a.HTML:超文本标记语言.从语义的角度描述页面结构. b.CSS:层叠样式表.从审美的角度负责页面样式. c.JS:JavaScript .从交互的角度描 ...
- 01--CSS的引入方式及CSS选择器
一 CSS介绍 现在的互联网前端分三层: a.HTML:超文本标记语言.从语义的角度描述页面结构. b.CSS:层叠样式表.从审美的角度负责页面样式. c.JS:JavaScript .从交互的角度描 ...
- day 42 01--CSS的引入方式及CSS选择器
01--CSS的引入方式及CSS选择器 本节目录 一 CSS介绍 二 行内样式 三 内接样式 四 外接样式 五 CSS的选择器 六 CSS的高级选择器 七 CSS的属性选择器 八 CSS的伪类选择 ...
- Selenium系列(十二) - 自动化必备知识之CSS选择器的详细使用
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 最常用的五类CSS选择器
一些新手朋友对选择器一知半解,不知道在什么情况下运用什么样的选择器,这是一个比较头疼的问题,针对新手朋友,对CSS选择器作一些简单的说明,希望能对大家的学习工作有一定的帮助,更多的CSS知识请参考We ...
- 还需要学习的十二种CSS选择器
在前面的文章中,我们在介绍了<五种你必须彻底了解的CSS选择器>,现在向大家介绍,还需要学习的另外十二种CSS选择器.如果你还没有用过,就好好学习一下,如果你已经熟知了就当是温习. 一.X ...
随机推荐
- C#程序编写高质量代码改善的157个建议【4-9】[TryParse比Parse、使用int?来确保值类型也可以为null、readonly和const、0值设为枚举的默认值、避免给枚举类型的元素提供显式的值、习惯重载运算符]
建议4.TryParse比Parse好 如果注意观察,除string之外的所有的基元类型.会发现它们都有两个将字符串转换为自身类型的方法:Parse和TryParse.以类型double为例. 两者最 ...
- Python—脚本程序生成exe可执行程序(pyinstaller)
一.pyinstaller的简介 Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的 ...
- 因特尔CPU上TM和R标识的区别
TM是英文trademark的缩写,TM标志并非对商标起到保护作用,它与R不同,TM表示的是该商标已经向国家商标局提出申请,并且国家商标局也已经下发了<受理通知书>,进入了异议期,这样就可 ...
- birt fatal error致命异常错误
- 最近学习了Http连接池
起因 6.1大促值班发现的一个问题,一个rpc接口在0~2点用户下单高峰的时候表现rt高(超过1s,实际上针对性优化过的接口rt超过这个值也是有问题的,通常rpc接口里面即使逻辑复杂,300ms应该也 ...
- Spring cloud Feign 深度学习与应用
简介 Spring Cloud Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解 ...
- 简单的权限管理php
转发自https://www.cnblogs.com/shenzikun1314/p/6604867.html#4262295 首先,要明白的基础理论是用户,角色,权限之间的关系是一对多,还是多对多. ...
- VO(视图模型) 与 DTO(数据传输对象)的区别
目录 VO(视图模型) 与 DTO(数据传输对象)的区别 1.VO与DTO概念 2.VO 视图模型的必要性与解耦 2.1 视图模型 2.2 视图模型存在的必要性 2.3 视图模型的解耦 3.DTO 存 ...
- 《C#并发编程经典实例》学习笔记—2.8 处理 async Task 方法的异常
异常处理一直是所有编程语言不可避免需要考虑的问题,C#的异步方法的异常处理和同步方法并无差别,同样要借助 try catch 语句捕获异常. 首先编写一个抛出异常的方法 static async Ta ...
- 最近几周,写了个微信好友检测助手App
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/130 微信好友检测助手App 最近几周,写了个微信好友检测 ...