选取XPath时选择的锚点的Href属性为空

4

我在页面中有许多链接,看起来像这样:

<a class="plant_detail_link" href="plants/O7-01111"><h3>O7-01111</h3></a>

我可以使用以下xpath选择器在我的页面中选择所有这些链接:

//a[@class='plant_detail_link']

我可以像通常一样提取每个链接的类等属性:

我可以像通常一样提取每个链接的类等属性:

//a[@class='plant_detail_link']/@class

但是当我尝试使用同样的技术来提取href属性值时,我得到一个空列表:

//a[@class='plant_detail_link']/@href

有没有人知道为什么会出现这种情况?

点击查看Chrome开发者控制台XPath执行的详细图像

编辑:

这里可以查看完整页面HTML - http://pastebin.com/MAjTt86V


你尝试过使用其他浏览器吗?你的XPath看起来是正确的。 - blurfus
xpath //a[@class='plant_detail_link']/@href 是正确的。你能发布/链接整个页面的HTML吗? - Daniele
我已经将完整页面粘贴到原始帖子中。 - Sion Griffiths
1个回答

0

这是一个Chrome浏览器的bug,我相信。 您可以添加[index] .value以获得结果。 换句话说,href的$x确实有效,但由于某种原因它不会在输出中返回结果。

例如,我在这个页面上对“Questions”按钮运行了这些$x查询,并得到了以下输出:

$x("//a[@id='nav-questions']/@href")
> []
$x("//a[@id='nav-questions']/@href")[0].value
> "/questions"

您可以使用类似以下代码来获取可用的值数组:
var links = $x("//a[@target='_blank']/@href");
var linkArr = []; 
for (i in links) { linkArr.push(links[i].value)}

或者将其放入一个函数中:

function getHref(selector, value, $x) {
var links = $x("//a[@"+selector+"='"+value+"']/@href");
var linkArr = []; 
for (i in links) { linkArr.push(links[i].value)}; 
return linkArr; }

getHref("target","_blank", $x);

编辑 不确定这是否对您有帮助,但在Chrome中添加逗号会返回输出而不包括[index].value:

$x,("//a[@id='nav-questions']/@href")
> "//a[@id='nav-questions']/@href"

你可以尝试在xpath选择器中添加逗号,但我不确定它是否对你有帮助。


这很有用,但我需要一个纯XPath解决方案,返回所有链接的列表。作为Jmeter测试的一部分使用,因此无法使用JavaScript。 - Sion Griffiths
我发现如果在 $x 后面加上逗号,就可以不用 [index].value 也能正常工作。$x, ("//a[@id='nav-questions']/@href") "//a[@id='nav-questions']/@href" - Anders Elmgren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接