selenium Python 学习笔记之二 Xpath 元素定位
1、掌握Xpath和CSS元素定位方式
为什么要使用xpath或者css?因为在页面中,有一些元素无法通过元素的信息精准的定位到元素,所以需要借助xpath和css。
Xpath 是xml文档中查找节点的语法。因为HTML文档也可以被转换为xml(HTML)文档,selenium的用户可以利用这种强大的语言在web因公中查找元素。
2、Xpath定位策略
-路径定位
--绝对路径
--相对路径
-属性定位
-属性与逻辑结合
-属性与层级结合
定位方法:find_element_by_xpath(xpath) # xpath 为表达式
按ctrl+F 可以在搜索框对xpath和css表达式进行校验
2.1 路径定位
---绝对路径:
表达式以/html开头,元素的层级之间以/分割
相同层级的元素可以使用下标,下标从1开始。
需要列出元素所经过的所有层级元素,在工作中一般不适用绝对路径
eg: /html/body/div/div/div/p/input 这种情况并不唯一,所以要在有多个元素的相同层级加下标来区分
---相对路径
匹配任意层级的元素,是以//tag_name 或者//* 开头
也可以使用下标,下标是从1开始
eg: //p[5]/button
//form/p[1]/input
2.2 元素的属性定位
使用元素的属性进行定位
//* 或者//tag_name 开头 ,表达式为//*[@attribute='value'] # attribute为元素的属性名,value表示的是元素对应的属性值,如果使用class的属性进行元素定位时,需要使用class里面的所有值,不能是部分值
eg: //input[@id = 'cancelA']
//*[@id = 'cancelA']
2.3 属性与逻辑相结合,就是 多个属性用逻辑运算符组合
//* 或者//tag_name 开头 //*[@attribute1 = 'value' and @attribute2 = 'value2']
eg: //*[@type = 'file' and @name= 'upfilea']
2.4 属性与层级相结合
是以 //* 或者 // tag_name 开头 //p[@id = 'pa']/input
在任一层级当中,都可以结合属性来使用
//p[@id = 'p4']/input
3、XPath扩展
--//*[text() = 'value'] --value表示要定位的元素的全部文本内容
--//*[contains(@attribute,'value')] --attribute 表示属性名,value表示属性的值,要定位的元素中attribute的值包含了value的内容
--//*[start-with(@attribute,'value')] --attribute 表示属性的名称,value表示字符串,要定位的元素attribute的属性值以value开头