Selenium之元素定位详解与进阶(二)

八种元素定位详解

# 创建浏览器驱动对象, 使用谷歌浏览器
driver = webdriver.Chrome()

1.id定位:

  • 特色: HTML元素id在HTML页面内是唯一的
  • 说明: 根据HTML元素id属性来定位
  • 前提: HTML元素必须有id属性
  • 方法: driver.find_element_by_id()

2.name定位:

  • 特色: HTML元素name属性值可以重复
  • 说明: 根据元素name属性来定位
  • 前提: 元素必须有name属性
  • 方法: driver.find_element_by_name()

3.class定位

  • 特色: HTML元素class属性可以多个命名
  • 说明: 根据元素的class属性来定位
  • 前提: 元素必须有class属性
  • 方法: driver.find_element_class_name()

4.tag_name定位

  • 特色: 适合定位页面中唯一标签名(eg: title)

  • 说明: 根据元素的标签名称来定位

  • 方法: driver.find_element_by_tag_name()

    如果页面中有多个相同标签名, 默认返回符合条件的第一个元素

5.link_text

  • 特色: 精准定位a标签

  • 方法: driver.find_element_by_link_text()

    只能传入全部匹配文本(精准定位)

6.partial_link_text:

  • 特色: 模糊和全部定位a标签

  • 方法: driver.find_element_by_partial_link_text():

    使用模糊匹配时, 最好选择代表唯一性的词

7.xpath定位

为什么使用xpath定位?
​因为之前学习的定位方法, 使用场景非常单一, 稍微特殊场景, 无法使用;
​什么是xpath:
​xml path: 简称
​xml: 一种标记语言, 用于数据存储和传递;

xpath常用策略:

1. 路径定位
	1). 相对路径: 以双斜杠开头, 层级之间使用单斜杠分隔, 层级各级都可以结合属性使用
	2). 绝对路径: 以单斜杠开始, 从根元素开始逐级往下写(不可跳跃元素),层级之间用单斜杠(/)分隔;
2. 相对路径 + 属性 eg: //*[@id='id_value']
3. 相对路径 + 逻辑属性 eg: //*[@id="id_value" and @name="name_value"]
4. 相对路径 + 层级 eg: //p[@id='id_value']/input[@id='id_value']
提示:
	1). 能指定标签名,就指定,否则使用*号代替;
	2). //或/后只能跟标签名或*
	3). 在xpath中所有元素属性必须使用@修饰

xpath语法扩展:

1. //*[text()='xxx'] # 查找文本值等于xxx的元素,注意: 此处text()非属性,所以不使用@
2. //*[contains(@id,'A')] # 查找id属性包含A的元素 注意: contains为关键字, 不可改变, 传值的时候不能越字母; 如: userA 写成 uA
3. //*[starts-with(@id,'u')] # 查找id属性以u字母开的元素 注意: 只能顺着写, 不能倒着写;

8.css定位

说明:

css, 主要控制元素的样式; (css语言中有非常强大的选择器, 利用选择器查找元素, 速度快)
​为什么使用css选择器?
​xpath运行速度慢, css运行速度快, 语法更加强大, 更加简单
css选择器:

1. id选择器
	前提: 元素必须有id属性
	语法: #id_value
2. class选择器
	前提: 元素必须有calss属性
	语法: .class_value
3. 元素选择器
	语法: element 如: input
4. 属性选择器
	语法: 
			1. [id='id_value'] # 查找id值为id_value的元素
			2. [id] # 查找元素中有id属性所有元素
5.层级选择器
	语法: 
		1. p input # p标签的后代所有input元素(后代选择器)
		2. p>input # p标签下的直属input元素(子类选择器)

css选择器扩展

css延伸
	[id^='u'] # 查找id属性并且以字母u开头的元素
	[id$='r'] # 查找id属性并且以字母A结尾的元素
	[id*='user'] # 查找id属性并且包含字母user的元素
	
扩展:
	li:first-child # 查找相同父类下的第一个li元素
	li:nth-child(2) # 查找相同父类下的第二个li元素
	li:last-child # 查找相同父类下的第最后1个li元素

八种元素使用优先级总结

1. 如果是链接文本, 推荐: link_text
2. 其他元素首选: css
3. css无法解决: xpath

实际工作很少手写元素定位

主要元素定位方式:

火狐: 老版本(FirePath, FireBug), 新版本(Chropath, Try XPath, xPath Finder) | 审查元素>选中元素>右键菜单

谷歌: Chropath, XPathHelper(应用商店插件) | 审查元素>选中元素>右键菜单

三种元素定位方法

1. find_element_by_xxx()
说明: 定位单个元素,返回值为元素, 如果未找到元素, 会报错
2. find_elements_by_xxx()
说明: 定位一组元素,返回的格式为列表;如果没找到,返回空列表;
	应用:
		1. 通过下标访问,下标从0开始
		2. 遍历访问
3. find_element()
1. 导包
	from selenium.webdriver.common.by import By
2. 调用方法[driver.find_element(类型,值)]
	类型:By.XXX(By.CSS_SELECTOR/By.XPATH/...)
	值:根据不同的类型编写不同的语法
提示:本方法是工作中最常使用的方法, 可以通过PO模式进行封装使用(请关注后续文章)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nonevx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值