一、路径符号核心区别(表格速查)
符号 | 名称 | 作用范围 | 典型使用场景 | 性能影响 |
---|---|---|---|---|
/ | 单斜杠 | ./ 相对路径直接子级, /绝对路劲-根路径 | 精确层级定位 | 高效 |
// | 双斜杠 | //当前元素下开始查找,可以跨嵌套层 | 模糊层级/跨嵌套定位 | 较低效 |
一、XPath基础定位类型(适合小白入门)
绝对路径定位
示例:/html/body/div[2]/div[3]/span
特点:从根节点开始逐层查找,像文件路径
缺点:路径长且容易受页面结构调整影响
相对路径定位
示例://div//span 或者 .//div/span
特点:用双斜杠//表示任意层级,更灵活
作用:查找所有div下的任意层级的span标签
示例2:./div 相对当前元素的直接子元素div
标签名+属性定位
示例://input[@id="username"]
解析:查找所有input标签中id属性等于"username"的元素
常用属性:@id、@class、@name、@type等
模糊匹配定位
示例1://div[contains(@class, "page")]
作用:查找class属性包含"page"的div
示例2://a[starts-with(@href, "https")]
作用:查找href属性以https开头的链接
文本内容定位
示例://button[text()="提交"]
进阶://h2[contains(text(), "最新消息")]
注意:text()方法对隐藏文本可能无效
二、进阶定位技巧(需要理解DOM结构)
6. 索引定位
示例://ul/li[3]
作用:选择第三个li元素(注意索引从1开始)
风险:页面结构变化时容易失效
逻辑运算符
示例://input[@type="text" and @required]
组合条件:and/or 连接多个条件
通配符使用
示例1://[@class="item"] 匹配任何标签
示例2://div[@] 匹配有任意属性的div
三、高级轴定位(处理复杂文档结构)
9. 父子关系
parent轴://span/parent::div
child轴://ul/child::li
后代: //ul/descendant:😗
descendant-or-self
兄弟关系
当前节点之前的所有同级节点:following-sibling://h3/following-sibling::p
当前节点后的同级节点:preceding-sibling://span/preceding-sibling::a
祖先关系
所有先辈: ancestor轴://em/ancestor::div[@class="container"]
后代关系
所有后代:descendant轴://div[@id="main"]/descendant::img
//div[contains(@class, 'chapter-name')]/parent::div/following-sibling::div[position() <= 20]