上一篇文章,我们分享了关于XPath的基本认识,了解它是什么工具,用来干嘛的。
揭开XPath的层纱,它究竟是什么神器?
阿楠RPA,公众号:小楠RPA揭开XPath的层纱,它究竟是什么神器?
今天分享一些语法的简单使用!
以这张图为例:
获取h2的标签:
/html/div/h2
获取p的标签:
/html/div/p
单个斜杠/ ,表示从根节点开始,需要按照节点顺序一层一层往下找,如果中间出现断层,会获取不到标签。
但是,如果要获取的标签层级比较深,一层一层这样编写会显得很麻烦...
获取h2的标签:
//h2
获取p的标签:
//p
两个斜杠// ,表示获取根节点下所有相同标签名一样的,
这样,获取具体的标签,就可以用双斜杠,不用一个节点一个节点编写了。
一、通过属性获取定位
例1://a[@class="Tabs-link AppHeader-TabsLink is-active css-1fb8pjf"]
表示获取有class属性,值为Tabs-link AppHeader-TabsLink is-active css-1fb8pjf的a标签
例2://a[@class]
表示获取有class属性的所有a标签
//li[@role="tab"]
表示获取有role属性,值为tab的li标签
每个标签内的所有属性,都可以通过@属性名 获取定位
二、通过函数获取定位
1、text()
例1://a[text()="首页"]
表示获取标签文本内容为 首页 的a标签
例2://a[text()="知乎知学堂"]
表示获取标签文本内容为 知乎知学堂 的a标签
例3://a[text()="发现"]
表示获取标签文本内容为 发现 的a标签
通过属性获取的标签有多个,想要指定其中某一个标签
(//a[@class="Tabs-link AppHeader-TabsLink css-1fb8pjf"])[1]
括号表示看成一个整体,获取第一个标签,这个索引值是从1开始的。
2、last()
如果要获取最后一个标签,使用last() 函数
(//a[@class="Tabs-link AppHeader-TabsLink css-1fb8pjf"])[last()]
如果要获取倒数第二个标签,使用last()函数 - 1
(//a[@class="Tabs-link AppHeader-TabsLink css-1fb8pjf"])[last() - 1]
3、position()函数
获取指定范围的标签 position()函数
(//a[@class="Tabs-link AppHeader-TabsLink css-1fb8pjf"])[position() > 1]
4、contains()函数
有的属性值是不固定的,经常发生变化,只有某一段值是固定的,就可以将这一段内容作为匹配条件
//a[contains(text(),"等你")]
表示模糊匹配 文本包含等你的标签
contains函数第一个参数,text()也可以换成属性,比如class
//a[contains(@class,"Tabs-link AppHeader-TabsLink css-1fb8pjf")]
关于XPath一部分语法,今天就介绍就到这里了!!!
希望能帮到有需要的朋友们,提前避坑,少走弯路!
我是小楠,对RPA感兴趣的,可以联系我一起交流,一起学习!