美文网首页
selenium08-css选择器高级用法

selenium08-css选择器高级用法

作者: 筱媛媛 | 来源:发表于2019-06-22 19:50 被阅读0次

上一篇文章讲了一些关于css操作元素的基本方法,本篇将继续就css选择器的高级用法进行展开,包括css子元素选择器、css组选择器和css兄弟选择器(相邻/非相邻)等。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!

有如下的html片段:
<div id="food" style="margin-top:10px;color:red">
    <span class="vegetable good">黄瓜</span>
    <span class="meat">牛肉</span>
    <p class="vegetable">青菜</p>
</div>
<select id="choose_car">
    <option value="fiat">红旗</option>
    <option value="audi">奥迪</option>
</select>
<div id="many">
        <p>小可爱会数数</p>
        <div>
            <p class="special" name="p1">one</p>
            <p>two</p>
            <p class="special">three</p>
            <p>
                <span>test1</span>
                <span>test2</span>
            </p>
        </div>
    </div>
前置条件:
from selenium import webdriver
driver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('file:///C:/Users/qin/Desktop/3.html')
01:css子元素(child)选择器(>)

1)概述:选择同一个父元素下的子元素

2)后代选择器与子元素选择器不同点:主要在于选择器是否只选择同一父元素的直接子元素

①后代元素:所有具有相同祖先的元素(包括子元素选择器)

②子元素:所有具有相同parent的元素(范围小于后代元素选择器)

3)语法:<s1>大于号<s2>;S1与s2是父子关系.比如#choose_car>choose_car

4)多级使用实例:#many>div>p>span

5)组合使用实例:#many p>span

6)使用场景:不同于后代选择器,只选择同一父元素的直接子元素

需求实现点:选择id=many的span元素

(1)通过后代选择器和子元素选择器区别

(1.1)通过后代选择器
span=driver.find_elements_by_css_selector('#many span')
for one in span:
    print(one.text)
运行结果如下:
test1
test2
(1.2)通过子元素选择器
span=driver.find_elements_by_css_selector('#many>span')
for one in span:
    print(one.text)
运行结果为:null。是因为子元素选择器只能选择“同一个父元素下的元素”

(2)通过逐层连续使用

span=driver.find_elements_by_css_selector('#many>div>p>span')
for one in span:
    print(one.text)
运行结果如下:
test1
test2

(3)通过与后代选择器组合使用

span=driver.find_elements_by_css_selector('#many p>span')
for one in span:
    print(one.text)
运行结果如下:
test1
test2
02:css组(group)选择器

1)概述:族选择器可以同时选择多个元素,用逗号隔开

2)语法: <s1>,<s2>; <s1>与<s2>表示两组不同的css选择器

3)实例:#food>span,option

4)使用场景:当一组选择器无法选择我们需要的元素,可以通过多组选择器来选择元素

(1)选择id=many和id=food下的所有元素

group=driver.find_elements_by_css_selector('#many,#food')
for one in group:
    print(one.text)
运行结果如下:
黄瓜 牛肉
青菜
小可爱会数数
one
two
three
test1 test2

(2)组选择器与后代选择器组合使用

(1.1)需求点:选择id为food的所有span子元素和所有的option
group=driver.find_elements_by_css_selector('#food>span,option')
for one in group:
    print(one.text)
运行结果如下:
黄瓜
牛肉
红旗
奥迪
(1.2)需求点:选择 id为food的所有span子元素和所有的p子元素
group=driver.find_elements_by_css_selector('#food>span,#food>p')
for one in group:
    print(one.text)
运行结果如下:
黄瓜
牛肉
青菜

(3)选择id为food的所有子元素(*)

group=driver.find_elements_by_css_selector('#food >*')
for one in group:
    print(one.text)
运行结果如下:
黄瓜
牛肉
青菜
03:css相邻兄弟选择器(+)

1)概述:选择紧邻在另一个元素后的元素,二者有相同的父元素

2)语法:<s1>+<s2> ; <s1>与<s2>是同级关系并且紧靠一起

3)实例:#food+select

4)使用场景:同一父元素的相邻子元素,两者挨在一起

5)注意事项:无法通过父元素定位到子元素 ; 无法通过兄弟节点定位到前面的节点元素(向后寻找)

(1)需求点:选择与id为food的相邻select节点元素
brother=driver.find_element_by_css_selector('#food+select')
print(brother.text)
运行结果如下:
    红旗
    奥迪
(2)需求点:选择与span元素相邻的P元素
brother=driver.find_element_by_css_selector('span+p')
print(brother.text)
运行结果如下:青菜
(3)需求点:选择id为many下P元素属性为special的相邻P元素
brother=driver.find_elements_by_css_selector('#many p.special+p')
for one in brother:
    print(one.text)
运行结果如下:
two
test1 test2
04:css非相邻兄弟选择器(~)

1)概述:选择非紧邻在另一个元素后的元素,二者有相同的父元素

2)语法:<s1>~<s2> ; <s1>与<s2>是同级关系无需紧靠一起

3)实例:#food~many

4)使用场景:同一父元素的子元素,元素之间没有紧靠在一起

5)注意事项:无法通过父元素定位到子元素 ; 无法通过兄弟节点定位到前面的节点元素(向后寻找)

(1)需求点:选择与id为food的非相邻的div节点元素
brother=driver.find_element_by_css_selector('#food~div')
print(brother.text)
运行结果如下:
小可爱会数数
one
two
three
test1 test2
(2)选择id为many下P元素属性为special的非相邻P元素
brother=driver.find_elements_by_css_selector('#many p.special~p')
for one in brother:
    print(one.text)
运行结果如下:
two
three
test1 test2
05:伪类nth-child,nth-of-type

1)伪类nth-child表示:<s1>:nth-child(n)表示从<s1>中选择第n个元素且<s1>表示的元素必须位于父元素的第n位

2)伪类nth-of-type表示:<s1>:nth-of-type(n)表示从<s1>中选择第n个元素,对<s1>表示的元素处于第几位没有要求

3)使用场景:根据下标选择子元素,下标从1开始

(1)伪类nth-child表示方法
ele=driver.find_element_by_css_selector('#choose_car>:nth-child(2)')
print(ele.text)
运行结果如下:奥迪
(2)伪类nth-of-type表示方法
ele=driver.find_element_by_css_selector('#choose_car>:nth-of-type(1)')
print(ele.text)
运行结果如下:红旗

相关文章

  • selenium08-css选择器高级用法

    上一篇文章讲了一些关于css操作元素的基本方法,本篇将继续就css选择器的高级用法进行展开,包括css子元素选择器...

  • 常用选择器

    元素选择器 id选择器 id选择器的用法 类选择器 class用法 选择器分组(并集选择器) 并集选择器用法 通配...

  • 常用选择器

    1.id选择器 2.id用法 3.类选择器 4.class用法 5.选择器分组(并集选择器) 6.并集选择器用法 ...

  • CSS的基础知识

    选择器使用: 可以分为:基础选择器和高级选择器(复合选择器) 基础选择器:标签选择器、类选择器、id选择器 高级选...

  • css基础知识

    选择器使用: 可以分为:基础选择器和高级选择器(复合选择器) 基础选择器:标签选择器、类选择器、id选择器 高级选...

  • 常用选择器

    1.元素选择器 2.id选择器 3.id用法 4.类选择器 5.class用法 6.选择器分组(并集选择器) 7....

  • 二、jQuery选择器高级用法

    本节我们将学习以下内容:1、多项选择器2、层级选择器3、属性选择器 一、多项选择器 二、层级选择器 1、后代选择器...

  • 安卓Android-PickerView时间选择控件的使用

    1.首先去maven库拉取所需的library 2.时间选择器用法 3.条件选择器用法

  • 安卓Android-PickerView时间选择控件的使用

    1.首先去maven库拉取所需的library 2.时间选择器用法 3.条件选择器用法

  • selenium css和xpath选择器 以及常用元素方法使用

    一、selenium css 选择器 用法 选择器示例描述**匹配任何元素elementDIV标签选择器,匹配所有...

网友评论

      本文标题:selenium08-css选择器高级用法

      本文链接:https://www.haomeiwen.com/subject/hmonfctx.html