XPath 一页纸总结(2025终极速记版)
贴在显示器旁边,任何定位 3 秒写出来!
| 项目 | 写法 | 说明 / 口诀 |
|---|---|---|
| 从任意位置开始 | // | 双斜杠 = 全局搜索,最常用! |
| 从根开始 | / | 单斜杠 = 严格层级,HTML 几乎不用 |
| 当前节点 | . | 单点 |
| 父节点 | .. 或 parent::* | 双点 = 爸爸 |
| 通配符 | * | 匹配任意标签 |
| 属性 | @id、@class、@href | @ = 属性 |
| 文本 | text() | 只取第一个文本节点 |
| 所有文本拼接 | .(点) | 推荐!用于 contains(., ‘关键词’) |
| 干净文本 | normalize-space() | 去首尾空格、换行,神技! |
| 第 n 个 | (//div)[5] | 一定要加括号! |
| 最后一个 | last() | (//div)[last()] |
| 包含 | contains(@class, 'login') | class/id 最常用写法 |
| 开头是 | starts-with(@id, 'login_') | 动态 id 神器 |
| 完全相等 | normalize-space() = '登录' | 文本最稳写法 |
| 并且 | and | |
| 或者 | or / | | | 是并集,超强! |
| 不包含 | not() | not(@disabled) |
| 父级 | parent::div 或 .. | |
| 所有祖先 | ancestor::div[1] | [1] = 最近的那个 |
| 同层后面 | following-sibling::div[1] | 下一个兄弟 |
| 同层前面 | preceding-sibling::div[1] | 上一个兄弟 |
| 任意后面第一个 | following::input[1] | 跨层级找下一个输入框,最稳! |
| 取属性值 | //@href、.//@src | 爬虫批量拿链接 |
| 取干净文本 | normalize-space(.) | 价格、标题必用 |
黄金万能模板(直接套)
//tag[contains(@class/id,'关键词') and ...][位置条件]
10 条永不失效的终极 XPath(收藏即高手)
1. //*[contains(normalize-space(),'登录')]
2. //input[not(@type='hidden') and not(@disabled)]
3. (//button | //a | //input)[contains(normalize-space(),'提交|登录|Login')][1]
4. //span[contains(text(),'¥') or contains(text(),'$')]/parent::*//..
5. //*[contains(@class,'price') or contains(@class,'Price')]
6. //th[text()='价格']/following-sibling::*[1]
7. //label[contains(text(),'验证码')]/following::input[1]
8. //a[contains(text(),'下一页') or contains(text(),'Next')]
9. //img/@src | //img/@data-src | //img/@data-original
10. (//div[contains(@class,'item') or contains(@class,'card')])[position()>1]
一句话口诀(背会就无敌)
“双斜杠到处找,@属性方括号包,
文本点contains,位置括号包,
爸爸两点parent,兄弟following,
去空格normalize,价格文本点最香!”
全部掌握上面内容 → 你已进入国内 XPath 前 1% 高手行列。
以后再也不用为定位发愁了,任何网站 10 秒出 XPath!
需要我给你出 10 道终极考核题(真题级:淘宝、抖音、政府网站、后台管理系统)当场验证你是否满分?随时说!