Xpath用href标签中的匹配文本获取第二个url

时间:2010-04-12 00:31:21

标签: java xpath htmlunit

html页面有分页链接,页面顶部有1个,页面底部有另一个。

使用HtmlUnit,我目前正在使用getByAnchorText("1");

在页面上获取HtmlAnchor

顶部的某些链接存在问题,因此我想使用XPath引用底部链接。

nextPageAnchor = (HtmlAnchor) page.getByXPath("");

如何使用xpath参考页面上的第二个链接?

我需要使用AnchorText引用链接,所以链接如:

<a href="....">33</a>

href有随机文本,是一个javascript函数,所以我不知道它会是什么。

这可以用xpath吗?

2 个答案:

答案 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定义。