Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Xpath获取第二个url,其中包含href标记中的匹配文本_Java_Xpath_Htmlunit - Fatal编程技术网

Java Xpath获取第二个url,其中包含href标记中的匹配文本

Java Xpath获取第二个url,其中包含href标记中的匹配文本,java,xpath,htmlunit,Java,Xpath,Htmlunit,html页面具有分页链接,一个设置在页面顶部,另一个设置在页面底部 使用HtmlUnit,我目前正在使用getByAnchorText(“1”)获取页面上的HtmlAnchor 顶部的一些链接有问题,所以我想使用XPath引用底部的链接 nextPageAnchor = (HtmlAnchor) page.getByXPath(""); 如何使用xpath引用页面上的第二个链接 我需要使用AnchorText引用链接,这样的链接: <a href="....">33</a&g

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

使用HtmlUnit,我目前正在使用
getByAnchorText(“1”)获取页面上的HtmlAnchor

顶部的一些链接有问题,所以我想使用XPath引用底部的链接

nextPageAnchor = (HtmlAnchor) page.getByXPath("");
如何使用xpath引用页面上的第二个链接

我需要使用AnchorText引用链接,这样的链接:

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

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

xpath有可能做到这一点吗?

非常简单:

 (//a)[2]
//a
获取页面上的所有锚点,
[2]
获取第二个锚点(它是一个索引的锚点,而不是零索引的锚点,因此2实际上是第二个锚点,而不是第三个锚点,例如,在数组中)

如果您想获得包含
33
文本的链接,可以使用:

 //a[./text() = "33"]
有关完整的xpath定义,请参见

编辑

为了回应Alexandre的评论,您可以使用

 (//a[./text() = "33"])[2]
这将首先选择文本为33的所有标签,然后选择其中的第二个

编辑2

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


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

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

(//a)[2]

要在
href
属性中选择具有特定文本的第二个
元素,请执行以下操作:

(//a[@href='…')[2]
请注意,parantises是必需的,表达式
//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),因为这两个链接都是其父链接的第二个
子链接。

也许我们希望第二个链接包含给定的文本,但问题不太清楚,谢谢,实际上,我刚刚返回了数组,如果它有2个元素,则得到第2个元素。这样会安全一点,但是谢谢你的提示<代码>(//a)[2]
应改为使用。表达式
//a[2]
将选择任何父节点的第二个
a
子节点,而不是整个文档中的第二个
a
元素。