目标: Xpath方法
1、定位一组元素的方法
element = driver.find_elements_by_*("*") * 可以是name,tag_name,
注意:元素定位方法如果带有s,则执行结果返回的是列表类型数据,里边的数据是多个元素对象
可以通过列表的下标(索引)获取对应的目标对象元素,再执行操作
依据:
- 没有s和带有s的定位方法的相互依据:
- 1.如果调用元素定位方法后,再点语法,提示的均为列表方法,则方法带s
- 2.如果调完元素定位方法后,在点语法,提示的均为元素方法,则方法不带s
2、元素定位—XPath方法
XPath是XML Path的简称,是一门在XML文档中查找元素信息的语言
XML:一种标记语言,用于数据的存储的传递
XPath定位策略
注意:使用XPath策略,需要在浏览器工具中根据策略语法,验证成功后再放入代码中使用
1、路径-定位
2、利用元素属性-定位
3、属性与逻辑-定位
4、层级与属性结合
无论使用哪一种XPath策略,定位方法都是同一个,不同策略只决定方法的参数的写法
方法:find_element_by_xpath("XPath策略")
路径预习:
绝对路径:最外层元素到指定元素之间所有经过元素层级的路径
以/html,使用/来分割元素层级
对页面结构要求比较严格,不建议使用
相对路径:匹配任意层级的元素,不限制元素的位置
1、相对路径以//开始
2、格式 //input 或者 // *
使用开发者工具XPath快速定位元素:
1、目标元素上鼠标邮件——检查
2、元素对应代码上鼠标邮件——copy
3、copy XPath copy full XPath
注意:使用相对路径时,要注意方法参数的内外引号嵌套问题
xpath 利用元素属性-定位
说明:通过元素的属性信息来定位元素
语法1: //标签名[@属性名 = "属性值"] //input[@id = "username"]
语法2: //*[@属性名= "属性值"] //*[@id = "username"]
注意事项:1、目标元素的有些属性和属性值,可能存在多个相同特征的元素,需要注意唯一性
2、与class_name 方法不同的是,如果使用具有多个值的class属性,则需要传入全部的属性值
xpath 利用属性与逻辑结合
说明:解决元素之间个相同属性重名问题
格式://*[@属性1= '属性值1' and @属性2 = '属性值2'] //*[@name = 'tel' and @class = 'tel']
xpath 利用层级与属性结合
如果通过元素自身的信息不方便直接定位到该元素,则可以先定位到父元素,然后再找到该元素
格式 : 父层级定位策略 / 目标元素定位策略
XPath延伸:
//*[text() = ""] 通过文本信息来定位元素(要求全部文本内容)
//*[contains(@attribute,"xxx")] 属性中含有xxx 的元素
//*[starts-with(@atttibut,"xxx")] 属性以xxx 开头的元素