3

我想编写一个函数来识别特定 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]每次增加都会给我页面上的每个唯一链接,但它们似乎是分组的。我怎样才能重写这条路径,以便我一个接一个地选择每个锚标记?

4

2 回答 2

8

如果您想选择页面上的第一个链接,您//body//a[1]应该这样做。(//body//a)[1]前一个表达式选择作为其父元素的第一个子元素的任何元素。

但无论如何,这似乎是一件很奇怪的事情。为什么你需要一个一个的链接?只需选择所有这些,作为节点列表或节点集,使用//body//a,然后迭代集合。

于 2012-06-14T13:27:06.367 回答
1

如果使用 path等//body/descendant::a[1]//body/descendant::a[2]则可以选择该元素a的所有后代元素body。或者在您尝试时,您需要大括号,例如(//body//a)[1](//body//a)[2]等等。

但是请注意,在使用 Javascript 的浏览器内部,document.links对象模型中有一个集合,因此不需要 XPath 来访问这些链接。

于 2012-06-14T11:04:17.293 回答