Selenium:定位(二:By模块定位,简单无基础)

目录

一、简介:

二、BY模块

三、find_element方法和find_elements方法

1)、find_element方法和find_elements方法的区别

2)、find_element方法和find_elements方法搭配BY模块使用

        (1)find_element方法:

        (2)find_elements方法:

三、测试用例

1)、定位逻辑

2)、实际用例

测试代码


一、简介:

        Selenium是通过模拟人对浏览器进行操作,既然是模拟人进行操作,那么就需要选择对页面上的哪一个标签进行操作。例如想让Selenium对页面上的登录按钮进行点击,就需要先让Selenium定位到这个按钮,在进行点击操作。

        我们把整个页面(HTML标签)看作是地球,HTML标签的子集标签看做是国家,

子集标签的子集标签看做是城市。当我们想要定位重庆时,我们以地球为根节点出发,选择中国子节点,在选择中国子节点下的重庆字节的。

二、BY模块

        selenium的by模块提供了八种定位方式。

        通过from selenium.webdriver.common.by import By导入By模块。

标签的id属性值进行定位使用:By.ID
通过标签的name属性值进行定位使用:By.NAME
通过标签的class属性值进行定位使用:By.CLASS_NAME
通过标签的标签中文本值进行定位使用:By.LINK_TEXT
通过标签的标签中的部分文本值进行定位使用:By.PARTIAL_LINK_TEXT
通过标签的标签名进行定位使用:By.TAG_NAME
通过标签的xpath路径进行定位使用:By.XPATH
通过标签的css选择器进行定位使用:By.CSS_SELECTOR

三、find_element方法和find_elements方法

        通过webdriver调用这两种方法搭配BY模块进行定位可以解决大部分的定位需求。

        find_element(by模块,'属性值')

         find_elements(by模块,'属性值')

1)、find_element方法和find_elements方法的区别

        find_element只返回一个选中的标签,即有多个满足条件的标签值返回第一个。
        find_elements返回的是一个列表,可以满足多个满足条件的标签,注意返回的是列表,让要对其中的标签进行操作需要指定列表元素的下标。

2)、find_element方法和find_elements方法搭配BY模块使用

        例如有两个个标签:

        <a id='id1' class='class' >111</a>

         <a id='id2' class='class' >222</a>

        (1)find_element方法:

        定位第一个a标签:

使用By.ID和标签id属性去定位

find_element(By.ID, 'id1')

使用By.CLASS_NAME和标签class属性去定位(有多个满足。但只匹配第一个)

find_element(By.CLASS_NAME, 'class')

        定位第二个a标签:
                

使用By.ID和标签id属性去定位

find_element(By.ID, 'id2')

        (2)find_elements方法:

        定位第一个a标签:

使用By.ID和标签id属性去定位(返回是列表,记得下标)

find_elements(By.ID, 'id1')[0]

使用By.CLASS_NAME和标签class属性去定位(返回是列表,记得下标)

find_elements(By.CLASS_NAME, 'class')[0]

         定位第二个a标签

使用By.ID和标签id属性去定位(返回是列表,记得下标)

find_elements(By.ID, 'id2')[0]

使用By.CLASS_NAME和标签class属性去定位(返回是列表,记得下标)

find_elements(By.CLASS_NAME, 'class')[1]

三、测试用例

1)、定位逻辑

        假如我们有如下节点,我们像定位到中国重庆下的巴南标签,那我们是不是得选定位中国下的重庆,在去定位中国重庆下的巴南,这样才能准确的定位到我们想要的元素,以XPATH写法为演示则是:/中国/重庆/巴南。

        <中国>

                <重庆>

                        <渝北></渝北>

                        <巴南></巴南>

                </重庆>

                <天津市>

                        <和平区></和平区>

                        <河西区></河西区>

                </天津市>

                <上海市>

                        <黄浦区></黄浦区>

                        <徐汇区></徐汇区>

                </上海市>

        </中国>

2)、实际用例

我们进入百度的网页,按F12进入开发者模式

 比如我们想拿这个标签里的’贴吧‘两字,我们是不是得先定位到这个a标签。

那我们先分析一下这不标签所在的路径。这个a标签的的父级是div标签,div标签的父级也是一个div标签,再往前走一级是还是一个div标签,再再往前走一级是一个body标签,再再再往上走一级到了根节点html标签,那么它的路径就确定下来了,html -> body ->div ->div ->div -> a,如图

 我们以XPATH写法为例子:我们以 . 代表当前页面,./html/body/div,在这我们定位4这个位置,在往下我们要定位到3去,但我们发现4下面有多个div标签。

 而我们要去的是它下面的第二个div,这时候我们就得去指定它:

第一种方法:./html/body/div/div[2] 给它一个下标,代表我们选择./html/body/div下面的第二个div。

第一种方法:在我们想要选取的div里面不是有个属性id嘛,,我们在定位标签的时候加上它的属性./html/body/div/div[@id="head"]。

再往下定位也是一样的逻辑,指定我们想要选择的标签:

./html/body/div/div[@id="head"]/div[@class="s-top-left-new s-isindex-wrap"]/a[4]

XPah语法

XPath 语法 | 菜鸟教程

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
# 创建浏览器驱动对象,Chrome()代表是谷歌浏览器的驱动
driver = webdriver.Chrome()
#打开网页
driver.get('https://www.baidu.com/')
#定位到指定标签
_blank = driver.find_element(By.XPATH,
    './html/body/div/div[@id="head"]/div[@class="s-top-left-new s-isindex-wrap"]/a[4]'
)
#打印标签的文本内容
print(_blank.text)

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐小土狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值