【学习笔记】XPath定位总结

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

原理:基于html的文档目录结构进行定位元素。

 

 以html代码为例讲解各种定位方法:

1. 绝对路径:以/开头从根节点一直找到当前节点

定位第一个div里面的img标签:/html/body/div/img[@alt="div1-img1"],其中[]里面是通过标签属性来确定要找到元素(img标签的alt属性)

绝对路径比较脆弱,变动结构后就容易变化,维护成本高,不推荐使用

2. 相对路径:以//开头的,根据要定位的元素的特征来定位的

定位第二个div里的input标签://input[@name="div2input"]

一般都会用相对路径

3. 索引定位:在找到一个集合结果后,通过索引定位第几个

定位第二个input标签://input[2]

如果页面中存在特征相同多个类似元素,此方法好用

4. 属性值定位:上面已经提到过了,就是在[]里面通过标签的属性来定位

例如定位“百度搜索”的超链接://a[@href="http://www.baidu.com"]

也可以使用多个属性定位://input[@type="text" and @name="address"]或//input[@type="text"][@name="address"]

如果页面中的元素特征性较强,能够通过特征定位,此法好用

5. 使用模糊函数定位:contains(),第一个入参是属性,第二个是第一个参数中的属性值包含的内容

定位“搜狗搜索”超链接://a[contains(@href,"sougou")]

适用于属性值有部分内容固定的情况,比如搜狗搜索的超链接有可能变成,https://www.sougou.com,而不是http://www.sougou.com,此时就不用修改,脚本代码也能兼容变化了,此法好用

6. 轴定位:用::表示,选择当前节点的父节点(parent)、子节点(child)、祖先节点(ancestor)、子孙节点(descendant)、后节点(following)前节点(preceding)、后兄弟节点(following-sibling)、前兄弟节点(preceding-sibling)

如上图,定位第一个div的img://div[1]/child::img

//div[1]定位到第一个div,它作为当前节点,找他的子节点中的img标签

此方法适用于相对位置较为固定的元素结构,此法好用

另:如果::后面是*,则表示取所有符合条件的元素

7. 文本text定位:通过html标签的文本定位的方法

例如定位文本内容等于“搜狗搜索”的a标签://a[text()="搜狗索索"]

常常结合contains函数://a[contains(text(),"搜狗")]

此法对于有text属性的标签好用,像div没有text属性,不能用

posted @ 2019-09-20 10:24  libre_yop  阅读(477)  评论(0编辑  收藏  举报