html页面有分页链接,页面顶部有1个,页面底部有另一个。
使用HtmlUnit,我目前正在使用getByAnchorText("1");
顶部的某些链接存在问题,因此我想使用XPath引用底部链接。
nextPageAnchor = (HtmlAnchor) page.getByXPath("");
如何使用xpath参考页面上的第二个链接?
我需要使用AnchorText引用链接,所以链接如:
<a href="....">33</a>
href有随机文本,是一个javascript函数,所以我不知道它会是什么。
这可以用xpath吗?
答案 0 :(得分:10)
要在文档中的任何位置选择第二个a
元素:
(//a)[2]
选择a
属性中包含特定文字的第二个href
元素:
(//a[@href='...'])[2]
请注意,parantheses是必需的,并且表达式//a[2]
将不会执行您的操作:它将选择所有a
元素,这些元素是任何父级的第二个a
元素。如果您的输入是
<p>Link <a href="one.html">One</a></p>
<p>Link <a href="two.html">Two</a> and <a href="three.html">Three</a>.</p>
<p>Link <a href="four.html">Four</a> and <a href="five.html">Five</a>.</p>
(//a)[2]
将返回第二个链接(two.html),而//a[2]
将返回第三个和第五个链接(three.html和five.html),因为这两个链接都是第二个a
1}}他们父母的孩子。
答案 1 :(得分:4)
这很简单:
(//a)[2]
//a
获取页面上的所有锚点,[2]
得到第二个(它是一个索引而不是零索引,所以2,实际上是第二个,而不是第三个,因为你会期待一个数组,例如)
如果您想获得33
文字的链接,那么您可以使用:
//a[./text() = "33"]
有关完整的xpath定义,请参阅http://www.w3.org/TR/xpath/。
修改
要解决Alexandre的评论,您可以使用
(//a[./text() = "33"])[2]
这将首先选择文本为33的所有<a>
标记,然后选择其中的第二个。
编辑2
注意:位置路径// para [1]与位置路径/ descendant :: para [1]的含义不同。后者选择第一个后代para元素;前者选择所有后代的para元素,这些元素是他们父母的第一个孩子。
Markusk确实是正确的。上面的引用来自上面引用的xPath定义。