4

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

使用 HtmlUnit,我目前正在使用页面上的 HtmlAnchorgetByAnchorText("1");

上面的一些链接有问题,所以想用XPath来引用下面的链接。

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

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

我需要使用 AnchorText 引用链接,因此链接如下:

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

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

xpath可以做到这一点吗?

4

2 回答 2

10

要选择a文档中任意位置的第二个元素:

(//a)[2]

要选择属性a中具有特定文本的第二个元素:href

(//a[@href='...'])[2]

请注意,括号是必需的,并且表达式//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其父级的第二个子级。

于 2010-04-12T05:55:51.987 回答
4

这很简单:

 (//a)[2]

获取页面上的//a所有锚点并[2]获取第二个锚点(例如,它是一个索引而不是零索引,所以 2 实际上是第二个,而不是您对数组所期望的第三个)

如果您想获得带有文本的链接,33则可以使用:

 //a[./text() = "33"]

有关完整的 xpath 定义,请参见http://www.w3.org/TR/xpath/

编辑

要解决 Alexandre 的评论,您可以使用

 (//a[./text() = "33"])[2]

这将首先选择<a>文本为 33 的所有标签,然后选择其中的第二个。

编辑 2

注意:位置路径//para[1] 与位置路径/descendant::para[1] 的含义不同。后者选择第一个后代 para 元素;前者选择作为其父母的第一个 para 孩子的所有后代 para 元素。

马库斯克确实是正确的。上面的引用来自上面引用的 xPath 定义。

于 2010-04-12T00:38:09.617 回答