selenium-xpath定位

xpath高级语法
xpath使用路径表达式获取xml文档或html文档上的节点或节点集(元素列表)。xpath中,一个点表示自己,两个点表示父元素。
1、绝对路径定位:/ 从最底层开始写。一层一层获取
2、相对路径定位:// 跨越层级。匹配所有后代
3、索引定位://input[2] #任意节点下的第二个 input 标签
4、属性定位(唯一定位):
//[@class] #匹配所有具备class属性的任意标签
//
[@class=“bar-bottom-wrap”] #匹配任意节点下,class 属性为 “bar-bottom-wrap” 的任意标签
//div[@class=“bar-bottom-wrap”] #匹配任意节点下, class 属性为 “bar-bottom-wrap” 的div标签
//input[@name=“username” and @type=“text”] #任意节点下name 属性为 username 的 input 标签
starts-with 例子: input[starts-with(@id,‘ctrl’)] #解析:匹配以ctrl开始的属性值
contains() 例子:Input[contains(@id,‘userName’)] #解析:匹配含有userName属性值
//div[@class=“bar-bottom-wrap” ] //div[@class=“bar-bottom-wrap” ]
//[class]
//span[text()] #匹配所有有文本
//
[text()=“要闻榜”] #定位所有标签下的“要闻榜”文本信息
//span[text()=“要闻榜”] #根据标签对中间的文本值定位
//span[contains(text(), “要闻”)] #模糊匹配文本
5、其他定位:
(1)选取当前节点的父节点
//[@id=“content_views”]/p[51]/span[1]/parent::p
(2)ancestor 选取当前节点的所有先辈(父、祖父等)
//
[@id=“content_views”]/p[51]/span[1]/ancestor::div
(3) ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身(不包含叔叔伯伯)
//[@id=“content_views”]/p[51]/span[1]/ancestor-or-self::div
(4)descendant选取当前节点的所有后代元素(子、孙等)
//
[@id=“content_views”]/descendant::span
(5)descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身
//[@id=“content_views”]/p[51]/descendant-or-self::p
(6)preceding-sibling选取当前节点之前的所有同级节点
//
[@id=“content_views”]/p[51]/span[2]/preceding-sibling::span
(7)following-sibling选取当前节点之后的所有同级节点
//*[@id=“content_views”]/p[51]/span[2]/following-sibling::span

注意:
(a)根据 class_name 进行定位的时候,有时候会遇到复合类,也就是class 属性中间有空格,class 属性比较特殊,class属性中的空格是间隔符号,表示的是一个元素有多个class的属性名称,此时元素定位的时候任取一个即可(不保证唯一定位)。
(b)selenium 没有提供判断元素是否存在的功能,所以当你需要判断一个元素存不存在的时候,直接定位可能会报错。我们可以去匹配一个元素列表,列表为空则元素不存在,列表不为空则元素存在技巧,在进行元素定位的时候,有时会遇到一些特别难以定位的元素,此时你可以使用下边这种模式,分步骤定位,一步步缩小定位范围。
#当使用 父元素.find_element_by_xpath 这种方式定位的时候,元素定位表达式必须以点开头,如:
ele = driver.find_elements_by_xpath("//div[@id=‘category-block’]//ol/li")
b = ele.find_elements_by_xpath(’.//li[@class=‘subcate-item’]//span’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值