Xpath(XML Path Language) 是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历。使用Xpath定位HTML中元素的位置,主要是基于元素的树形结构。
Xpath表达式学习
基本表达式
表达式 | 描述 |
---|---|
nodename | 选取此节点下的所有子节点 |
/ | 从根节点开始选取,绝对定位 |
// | 从符合条件的元素开始,而不考虑他们的位置。相对定位 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
谓语表达式
谓语用来查找某个特定的节点或包含某个指定值的节点。
路径表达式 | 描述 |
---|---|
//body/div[1] | 选取所有body子元素的第一个div元素 |
//body/div[last()] | 选取所有body子元素的最后一个div元素 |
//body/div[last()-1] | 选取所有body子元素的倒数第二个div元素 |
//body/div[position()<3] | 选取所有body子元素中最前面的两个div元素 |
//div[@class] | 选取所有拥有名为class的属性的div元素 |
//div[@class = 'salaxy-layout'] | 选取所有用于名为class,值为salaxy-layout的元素 |
通配符
通配符 | 描述 |
---|---|
* | 匹配任何元素的节点 |
@ | 匹配任何属性节点 |
轴定位
轴定位,使用::表示
轴名称 | 描述 |
---|---|
ancestor | 选取当前节点的所有先辈(父,祖父等) |
cancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 |
attribute | 选取当前节点的所有属性 |
child | 选取当前节点的所有子元素 |
descendant | 选取当前节点的所有后代元素(子、孙等) |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身 |
following | 选取当前节点之后的所有节点 |
parent | 选取当前节点的父节点 |
preceding-sibling | 选取当前节点之前的所有兄弟节点 |
following-sibling | 选取当前节点之后的所有兄弟节点 |
self | 当前节点 |
常用定位方式:
1、元素属性,快速定位,唯一属性:
//*[@id="images"]
但是很多项目,前端在进行编写时为设置唯一属性。
2、层级与属性结合,解决没有属性问题:
//div[@id="images"]/a[1]
3、定位时,可以添加其标签内的文本,便于知晓其含义:
//button/span[contains(text(),'添加策略')]
4、查找id属性的值包含”kw“的元素:
//*[contains(@id,'kw')]
5、查找文本里包含”新闻“的元素
//*[contains(text(),'新闻')]
6、使用多个相对路径去定位一个元素用 //分开:
//div[@class=‘formgroup’]//input[@id=‘user-message’]
快速得出Xpath路径
目前,主流的浏览器都提供了复制元素Xpath的功能,如下所示:
//*[@id="add"]/div/section/div[2]/div[1]/div[4]/div/div[1]/div[3]/div[1]/div
浏览器提供的xpath路径层级较多,若其层级中的某个div的路径变化则会导致定位失败。故,在定位某个节点时,需要尽量将xpath路径缩短,提高通用性。