selenium元素八种定位方法

一、元素定位

元素定位8中方式Id,Name,Link text,Partial Link Text,Tag Name,Class Name,Xpath,Css Selector

1.ID

id相当于身份证,一般不会重复:

driver.find_element('id', 'su')

2.name

通过属性name定位:

driver.find_element('name', 'ch')

3.Link Text

针对于a标签实现的定位

image-20240130155924303

driver.find_element('link text', '新闻').click()

4.Partial Link Text

针对a标签的text内容进行模糊查找:

driver.find_element('partial link text', '新')

5.tagname

通过标签名称进行定位,一般用不到

driver.find_elements('tag name', 'input')

6.classname

基于元素的class属性定位:

driver.find_element('class name', 'bg s_ipt_wr new-pmd quickdelete-wrap ipthover')

7.css selector

原理就是基于css样式来对元素进行定位,属于8大定位中最快的定位方法:

这里对于id选择器、class选择器、标签选择器不在进行陈述。

7.1 id选择器

使用标签中的id定位,用#号加id值 #s_kw_wrap

driver.find_element('css selector', '#s_kw_wrap')

7.2 标签选择器

直接通过标签名定位,日常中没啥意义

driver.find_element('css selector', 'input')

7.3 class选择器

使用class属性值进行定位,使用符号.class的值,如果class的值中有空格需要使用.对所有的空格进行替换

driver.find_element('css selector', '.toindex')

7.4 属性选择器

属性选择器即 [属性名=‘属性值’],与xpath中的属性定位 [@属性名=‘属性值’]注意区分

driver.find_element('css selector', '[id="s_kw_wrap"]')

可以同时使用多个属性选择器 [属性名=‘属性值’][属性名=‘属性值’]

driver.find_element('css selector', '[type="text"][name="wd"]')

7.5 三种选择器同时使用

三种选择器同时使用时中间不用空格,且标签选择器必须在最前面

driver.find_element('css selector', 'input#su.btn.self-btn.bg.s_btn')

7.6 后代选择器

在当前节点后 使用空格加上后代标签,只要是直系后代元素都能定位到。

image-20240131095836856

driver.find_element('css selector', '[id="form"] i')

7.7 子元素选择器

使用>定位,只能定位到子元素只要是儿子都能定位到,中间不能隔代,也无法定位到孙子。

driver.find_element('css selector', '[id="form"]>span')

7.8 相邻兄弟选择器

使用+定位,只能定位到同级元素(具有同一个父元素)

image-20240131101136841

driver.find_element('css selector', '[id="s_top_wrap"]+div')

7.9 后续兄弟选择器

使用 ~ 定位,可以定位到所有的兄弟元素,不管是不是紧挨的都能找到

image-20240131101312327

driver.find_element('css selector', '[id="s_top_wrap"]~div')

7.10 伪类

伪类一般用于标签数量会发生变化的时候;比如有一个下拉框,但是因为需求还没有完全确定,下拉框中选项的数量可能会因为需求的变动而发生变化(数量会发生变化)。

image-20240131102240467

如图,id=‘head’的div标签下面定位到了很多div标签,假设这里的div标签数量不定,会动态的变化,此时就可以使用伪类进行定位:

:nth-child(n)

表示取父标签下的第n(n从1开始)个元素

driver.find_element('css selector', '[id="head"]>div:nth-child(2)')
:nth-last-child(n)

表示取父标签下倒数第n个元素

driver.find_element('css selector', '[id="head"]>div:nth-last-child(2)')
:first-child

表示取父标签下第1个元素

driver.find_element('css selector', '[id="head"]>div:first-child')
:last-child

表示取父标签下最后一个元素

driver.find_element('css selector', '[id="head"]>div:last-child')

8.xpath

基于html结构来对元素进行定位

示例://*[@id=“kw”] 表示从根路径下开始查找任意一个元素,该元素具备有id属性,且属性值为kw

  • //表示从根路径下开始查找
  • *表示任意标签,也可以指定标签
  • [] 表示添加筛选条件
  • @ 表示基于属性定位
  • id 表示这个属性有id的属性
  • kw 表示属性的值

8.1 属性定位(推荐)

8.1.1 全部属性定位
driver.find_element('xpath', '//*[@value="百度一下"]')
8.1.2 部分属性定位

部分属性调用contains()函数,进行模糊查找 contains(@属性名,’属性值’)

driver.find_element('xpath', '//*[contains(@value,"一下")]')
8.1.3 多个属性定位

使用and可以连接同时指定多个属性

driver.find_element('xpath', '//*[@type="submit" and @value="百度一下" and @id="su"]')

8.2 文本定位(推荐)

image-20240130170257586

8.2.1 全部文本定位

text()用于定位标签的文本 text()=‘文字’

driver.find_element('xpath', '//*[text()="以人民为中心推动文化建设"]')
8.2.2 部分文本定位

部分属性调用contains()函数,进行模糊查找 contains(text(),'部分文字')

driver.find_element('xpath', '//*[contains(text(),"以人民")]')

8.3 轴定位

轴定位表示与当前节点上下文节点的关系,语法:轴名称::标签名[索引值],[索引值]可不加,如果需要使用索引则需要根据轴名称的作用对应的向前取值或向后取值。索引值从1开始算。

8.3.1 parent:: *

表示选取当前节点的父节点。作用等同于 … *可以指定标签名

image-20240130171703587

driver.find_element('xpath', '//*[@name="tj_briicon"]/parent::*')
# 与..作用相同
driver.find_element('xpath', '//*[@name="tj_briicon"]/..')
8.3.2 child:: *

表示选取当前元素的子节点。作用等同于 /

image-20240130172108117

driver.find_element('xpath', '//*[@id="form"]/child::input[1]')
8.3.3 ancestor:: *

表示选取当前节点的所有的直系先辈(父节点,祖父节点) 一般不常用

image-20240130172634754

driver.find_element('xpath', '//*[@id="form"]/ancestor::div[1]')
8.3.4 descendant:: *

表示选取当前节点的所有的直系后辈(子节点,孙子节点) 一般不常用

image-20240130172858115

driver.find_element('xpath', '//*[@id="form"]/ancestor::div[1]')
8.3.5 preceding:: *

表示选取当前节点的开始标签之前的所有节点,即要定位的结束标签一定要在当前节点开始标签之前。所以对于直系先辈的元素是无法定位的,因为直系先辈的结束标签必定在当前节点之后了。

image-20240130173951762

image-20240130173426291

driver.find_element('xpath', '//*[@id="form"]/preceding::a[1]')
8.3.6 preceding-sibling:: *

表示选取当前节点的开始标签之前的所有的同级节点

image-20240130174254962

driver.find_element('xpath','//*[@id="form"]/preceding-sibling::*')
8.3.7 following::

表示选取当前节点的结束标签之后的所有节点。(只要在当前节点的结束标签之后都能定位到,不常用)

image-20240130174700113

driver.find_element('xpath','//*[@id="s_kw_wrap"]/following::*')
8.3.8 following-sibling:: (推荐)

表示选取当前节点的结束标签之后的所有同级节点。(只能定位到同级节点,相当于兄弟)

image-20240130175052270

driver.find_element('xpath','//*[@id="s_kw_wrap"]/following-sibling::*')
  • 61
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃鱿鱼的大叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值