我想编写一个函数来标识特定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]
都会在页面上一个接一个地给我每个唯一的链接,但它们似乎是分组的。如何重写此路径,以便逐个选择每个锚标记?
如果要选择页面上的第一个链接,则应(//body//a)[1]
//body//a[1]
。前一个表达式选择作为其父元素的第一个子元素的任何元素。
但无论如何,这似乎是一件非常奇怪的事情。为什么需要一一链接?只需使用 //body//a
选择所有这些作为节点列表或节点集,然后遍历该集。
如果使用路径//body/descendant::a[1]
、//body/descendant::a[2]
等,则可以选择body
元素的所有后代a
元素。或者您的尝试需要大括号,例如 (//body//a)[1]
、(//body//a)[2]
等等。
但请注意,在带有 Javascript 的浏览器中,对象模型中有一个 document.links
集合,因此不需要 XPath 来访问链接。