我想编写一个标识特定HTML页面上所有链接的函数。我的想法是使用XPath,使用//body//a[x]
之类的路径并递增x来浏览页面上的第一,第二,第三个链接。
在Chrome中尝试此操作时,我会加载页面http://exoplanet.eu/,并在Chrome开发者工具JS控制台中调用$x("//body//a[1]")
。我期待页面上的第一个链接,但这会返回多个锚元素的列表。调用$x("//body//a[2]")
会返回两个锚元素。调用$x("//body//a[3]")
不会返回任何内容。
我希望每次递增[x]
会在页面上逐一给出每个唯一的链接,但它们似乎是分组的。如何重写此路径以便逐个选择每个锚标记?
答案 0 :(得分:6)
如果您要选择页面上的第一个链接,则//body//a[1]
应为(//body//a)[1]
。前一个表达式选择任何元素作为其父元素的第一个子元素。
但无论如何,这似乎是一件非常奇怪的事情。为什么你需要逐个链接?只需使用//body//a
选择所有这些作为节点列表或节点集,然后迭代该集合。
答案 1 :(得分:0)
如果您使用路径//body/descendant::a[1]
,//body/descendant::a[2]
等,则可以选择a
元素的所有后代body
元素。或者您的尝试需要大括号,例如(//body//a)[1]
,(//body//a)[2]
等等。
但请注意,在使用Javascript的浏览器中,对象模型中有一个document.links
集合,因此访问链接不需要XPath。