使用 xpath 选择锚点时,Href 属性为空
Posted
技术标签:
【中文标题】使用 xpath 选择锚点时,Href 属性为空【英文标题】:Href attribute empty when selecting anchor with xpath 【发布时间】:2016-06-27 21:22:04 【问题描述】:我在一个页面中有许多看起来像这样的链接:
<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
有人知道为什么会出现这种情况吗?
image detailing chrome developer console xpath execution
编辑:
在此处查看完整页面 html - http://pastebin.com/MAjTt86V
【问题讨论】:
您是否尝试过其他浏览器?你的 xpath 在我看来是正确的 xpath //a[@class='plant_detail_link']/@href 是正确的。您可以发布/链接页面的整个 html 吗? 我已将整页粘贴到原帖中 【参考方案1】:我相信这是一个 chrome 错误。您可以添加 [index].value 以获取结果。换句话说,href 的 $x 确实有效,但由于某种原因它没有在输出中返回结果。
例如,我在此页面的控制台中针对“问题”按钮运行了这些 $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。 我发现如果你在 $x 后面加上一个逗号,它可以在没有 [index].value 的情况下工作。 $x,("//a[@id='nav-questions']/@href") "//a[@id='nav-questions']/@href"以上是关于使用 xpath 选择锚点时,Href 属性为空的主要内容,如果未能解决你的问题,请参考以下文章