xpath
窍门:先分析html结构再去定位,观察层级关系和可用元素。
- 定义:
XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素。
插件的安装:ChroPath
链接:https://pan.baidu.com/s/1KW1ifWxGxkrSIfJcEa154A 密码:e6a4
- 代表安装成功
-
//*定位到所有元素
-
1、Xpath支持ID、Class、Name定位功能
通过id定位
//*[@id='i1']
通过name定位
//*[@name='name']
通过clas定位
//*[@class='class_name']
- 返回是列表的,支持根据下标,但还是不是唯一
- 当标签页重复时,Xpath提供了层级过滤
- xpath递进:如果找不到唯一元素,先找父级元素
支持通过 / 进行层级递进,找到符合层级关系的标签
//form/div/input[@placeholder="用户名"]
当层级都重复时,可以通过单个层级的属性进行定位
//form/div[@class='login-user']/input
- 2、如果没有ID、Class、Name,xpath还支持属性定位
@ 代表以属性定位,后面可以接标签中任意属性
//*[@other='attribute']
- 3、当标签的属性重复时,Xpath提供了通过标签来进行过滤
将 * 换位任意标签名,则可根据标签进行筛选
//input[@placeholder='用户名']
- 4、一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。Xpath提供了索引过滤
通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始
//select[@name='city'][1]/option[1]
- 5、如果还重复,Xpath提供的终极神器,逻辑运算定位。and 或 or
通过and来缩小过滤的范围,只有条件都符合时才能定位到
//select[@name='city' and @size='4' and @multiple="multiple"]
or就相反了,只要这些筛选中,其中一个出现那么久匹配到了
//select[@name='city' or @size='4']
ps:火狐浏览器支持,右键复制xpath路径,但是不推荐,因为复制的是绝对路径,一但需求变更,改变了HTML的层级关系,就会定位不到。所以建议相对路径。