pycharm与google 02 元素定位

1.  通过id定位:

        html规定ID属性在HTML文档中必须唯一,webdriver提供的id定位方法就是通过元素id属性来查找元素。

find_element_by_id()

具体用法:

# 自动化要做的就是模拟鼠标和键盘和操作页面上的元素,或单击,或输入,或鼠标悬停
from selenium import webdriver
from time import sleep
#以百度页面为例
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

# 通过id定位
driver.find_element_by_id("kw").send_keys("2111")
driver.find_element_by_id("su").click()

2.  通过name定位:

        html中规定name来指定元素的名称,类似于人名,name的属性值在当前页面中可以不唯一

# 通过name定位
driver.find_element_by_name("wd").send_keys("2111")
driver.find_element_by_id("su").click()

3.  通过class定位:

        HTML规定class来指定元素的类名。其用法与id,name类似

# 通过class定位
driver.find_element_by_class_name("s_ipt").send_keys("2111")
sleep(3)
# bg s_btn二选一,或者bg.s_btn
driver.find_element_by_class_name("s_btn").click()

4.  Tag定位

        HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。例如我们打开任意一个页面,查看前端都会发现大量<div><input><a>等tag,所以很难通过标tagname去区分不同的元素

# Tag定位
driver.find_element_by_tag_name("form>span>input").send_keys("2111")
driver.find_element_by_tag_name("div>form>span>input").click()

5.  Link定位

        专门用来定位文本链接

# Link定位 专门用来定位文本链接
driver.find_element_by_link_text("直播").click()

6.  Partial Link定位

        是对Link定位的一种补充,有些文本链接比较长时,取文本链接的一部分进行定位,只要这一部分信息可以唯一的标识这个链接

# Partial Link定位
driver.find_element_by_partial_link_text("123").click()
#123唯一标识baidu页面的链接hao123

7.  Xpath定位:

        Xpath是一种在XML文档中定位元素的语言。因为HTML可以看成XML的一种实现,所以selenium用户可以使用这种强大的语言在web应用中定位元素

        7.1  Xpath定位之绝对路径定位

                Xpath有很多种定位策略,最简单直观的就是写出元素的绝对路径。主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。在body文本内,一级一级往下查找

                如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,例如 div【2】表示当前层级下的第二个div标签

# xpath定位
driver.find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span/input").send_keys("2111")
driver.find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span[2]/input").click()

        7.2  Xpath定位之元素的属性值定位

                

# xpath定位 使用元素的属性值定位
# //表示当前页面某个目录下,input表示定位元素的标签名,[@id='su'] 表示这个元素的id属性值等于kw
#Xpath定位 通过元素的id属性定位
driver.find_element_by_xpath("//input[@id='kw']").send_keys("niu")
driver.find_element_by_xpath("//input[@id='su']").click()


# xpath通过属性值name和class定位
driver.find_element_by_xpath('//input[@name="wd"]').send_keys("niu")

# 如果不想指定标签名,则可以用星号*代替
# 使用Xpath不局限于id,name,class这三个属性,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。
driver.find_element_by_xpath('//*[@class="bg.s_btn"]')

        7.3  层级与属性结合

如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找其上一级元 素,如果它的上一级元素有可以唯一标识属性的值,也可以拿来使用;如果上一级没有再找上一级,以此类推

# Xpath定位 层级与属性结合
# 如果class包含多个name,中间有空格,可以采用下面的方式进行定位
#百度输入框
driver.find_element_by_xpath("//span[contains(@class,'quickdelete-wrap') and contains(@class,'bg') and contains(@class,'s_ipt_wr')]/input").send_keys("你要搜索的内容")
# 通过class属性定位到父元素,后面/input就表示父元素下面的子元素,也就是我们想要定位的元素
#百度点击搜索
driver.find_element_by_xpath("//span[contains(@class,'s_btn_wr') and contains(@class,'bg')]/input").click()

 PS: 如果元素的属性class的属性值包含多个name(即中间有空格,分为多个字段),使用contains把这些字段连接起来

        7.4  xpath定位之逻辑运算符

                如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来 查找元素

# xpath定位 使用逻辑运算符 如果一个属性不能唯一的区分一个元素,使用逻辑运算符连接多个属性来查找元素
driver.find_element_by_xpath("//form[@id='form' and @name='f']/span/input").send_keys("你要搜索的内容")
driver.find_element_by_xpath("//form[@id='form' and @name='f']/span[2]/input").click()

详细xpath定位请点击这里

8.  CSS定位

9.  元素定位的另一种写法


#元素定位的另一种写法
from selenium.webdriver.common.by import By
driver.find_element(By.ID,'kw').send_keys("你要搜索的内容")
driver.find_element(By.NAME,'wd').click()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值