Xpath定位小结

Xpath语法堂

1.Xpath语法教程

2.Xpath通过文字匹配

contains()函数匹配
xpath=//*[@id=“backFeeManage”]//a[@class=“btn btn-primary” and contains(text(), “查询”)]

3.Xpath通过多层级定位

(1)多层级
xpath=//[@id=“schoolListWrapper”]/div[@class=“allSchool”]
(2)通过//符号匹配A层级下所有路径中B层级的元素,而不管他的位置
xpath=//
[@id=“carryOverManage”]//a[@id=“carryOverManage_carryOverSubmit”]

4.匹配需匹配元素的最后一个或倒数第二个

使用last()函数
xpath=(//[@id=“courseArrange_table”]/tbody/tr/td[10])[last()]
xpath=(//
[@id=“courseArrange_table”]/tbody/tr/td[10])[last()-1]

5.截取字符再匹配

例如xpath为这种的//*[@id=“dropdown-menu-4436”]/li[1],4436这个数字由于会随时变化,所以会导致元素定位不到,可用如下方法定位
PS:先截取固定字符串,然后通过last()函数获取最后一个(不是最后一个则不用last)
xpath=(//ul[starts-with(@id,“dropdown-menu”)])[last()]/li[1]
在这里插入图片描述
6.有时,我们定位元素时,元素位置可能会发生随机性的变化,比如列表中有两行数据,课程1和课程2,其价格分别是100和200,页面加载出来后,可能课程1在第一行,也可能在第二行,那么对应的价格也会随之变化,当你想要做效验课程1的价格为100元时,由于元素变化可能就会与预期结果不符,导致用例失败
那么如何通过课程名称来定位价格呢,如下所示:
在这里插入图片描述

原xpath:
//[@id=“carryOverManage”]//table/tbody//tr[2]/td[15]
匹配后的xpath:
//
[@id=“carryOverManage”]//table/tbody//tr[td//text()[contains(.,“课程1”)]]/td[15]
(先定位到行://*[@id=“carryOverManage”]//table/tbody//tr
然后定位这一行的文本信息:[td//text()[contains(.,“课程1”)]],text()获取所有文本,contains(.,“课程1”)中.表示匹配所有文本,然后再去匹配列/td[15])

7.xpath定位时间控件
(1)定位当前日期的后一天
(//*[@id=“copyArrageCourse_selectedDate_dp”]//table/tbody//td[@class=“dp-table-wday today”]/following-sibling::td)[1]
在这里插入图片描述
(2)XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点之前的所有同级节点
8、following-sibling 选取当前节点之后的所有同级节点
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点
11、self 选取当前节点
12、attribute 选取当前节点的所有属性
13、namespace 选取当前节点的所有命名空间节点
(转载至:https://www.cnblogs.com/VseYoung/p/8686383.html)

(3)使用position()函数定位

from lxml import etree

html = '''
<!DOCTYPE html>
<html lang="en">
<head>
    <!--网页头部信息-->
    <title>网页名</title>
</head>
<body>
    <!--下面是网页正文-->
    <div class="two">id-text</div>
    <div class="one two">class-text</div>
    <div class="one">class-span</div>
    <div class="three">three</div>
</body>
</html>
'''

html =etree.HTML(html)
#取div位置大于2的 并且类包含three的
content1 = html.xpath("//div[position()>2 and contains(@class,'three')]/@class") 
print(content1)

遇到日期控件时,取明天日期:
可以
可以看到,今天日期的元素为:dp-table-wday today
周末元素为:dp-table-wwday
周一到周五为:dp-table-wday
那么,需要定位明天的日期,就需要先拿到图示所有日期,然后再利用position()>今天日期,取到大于今天的所有日期,然后再匹配大于今日日期的第一个即可
((//td[starts-with(@class,“dp-table-w”)])[position()>//td[contains(@class,“today”)]])[1]
或者
(//td[contains(@class,“today”)]/following::td[starts-with(@class,“dp-table-w”)])[1]

8.substring()方法
假设name属性值为(name=“off”)
xpath = “//*[substring(@name,2)=‘ff’]”
表示查找name属性值中,从第二个数到最后一个数是否等于ff

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目 录 译者序 作者简介 前言 第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 法律词汇表 1.5.4 医学词汇表 1.5.5 计算机词汇表 1.6 XML技术的主要特性 1.6.1 格式正规的XML 1.6.2 文档类型定义 1.6.3 数据建模 1.6.4 文档对象模型 1.6.5 XML 简单API 1.6.6 命名空间和模式 1.6.7 链接和查询 1.6.8 转换XML 1.6.9 XML和数据库 1.6.10 服务器到服务器 1.6.11 电子商务与XML 1.6.12 使用样式 1.6.13 无线应用程序协议和WML 1.7 XML的应用程序举例 1.8 小结 第2章 XML语法 2.1 标记语法 2.1.1 字符 2.1.2 命名 2.2 文档部分 2.3 元素 2.3.1 起始标记 2.3.2 结束标记 2.3.3 空元素标记 2.3.4 标记:一个简单的例子 2.3.5 文档元素 2.3.6 子元素 2.3.7 元素嵌套 2.3.8 字符串 2.4 字符数据 2.5 属性 2.5.1 特殊属性 2.5.2 空白 2.5.3 行尾的处理 2.6 字符引用和实体引用 2.6.1 字符引用 2.6.2 实体引用 2.7 处理指令 2.8 注释 2.9 CDATA部分 2.10 文档结构 2.10.1 序言 2.10.2 尾声 2.11 XML语法小结 2.12 格式正规的文档 2.13 解析器 2.13.1 事件驱动的解析器 2.13.2 基于树的解析器 2.13.3 解析器基准测试 2.14 书籍目录应用程序 2.15 小结 第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 3.3.3 属性 3.3.4 条件部分 3.4 DTD的缺点 3.5 用于图书目录问题的DTD 3.5.1 图书目录问题的正式定义 3.5.2 对象关系问题 3.5.3 进一步讨论 3.6 小结 第4章 数据建模与XML 4.1 信息建模 4.1.1 静态模型和动态模型 4.1.2 文档和数据 4.1.3 从何处开始 4.1.4 静态信息模型 4.1.5 动态建模:对数据进行哪些处理? 4.2 设计XML文档 4.2.1 XML的两种角色 4.2.2 将信息模型映射到XML 4.3 模式语言和表示法 4.3.1 模式的作用 4.3.2 将DTD作为模式 4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX 1.0: XML简易API 6.1 事件驱动接口 6.2 SAX的由来 6.3 SAX的高级特性 6.3.1 可选择的源输入 6.3.2 处理外部实体 6.3.3 选择解析器 6.4 一些SAX设计模式 6.
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值