How to select all links on a page using XPath

xpath, xpointer

Solution

If you use the path `//body/descendant::a[1]`, `//body/descendant::a[2]` and so on you can select all descendant `a` elements of the `body` element. Or with your attempt you need braces e.g. `(//body//a)[1]`, `(//body//a)[2]` and so on.

Note however that inside the browser with Javascript there is a `document.links` collection in the object model so no XPath needed to access the links.

Problem

I want to write a function that identifies all the links on a particular HTML page. My idea was to use XPath, by using a path such as `//body//a[x]` and incrementing x to go through the first, second, third link on the page. Whilst trying this out in Chrome, I load up the page http://exoplanet.eu/ and in the Chrome Developer Tools JS console, I call `$x("//body//a[1]")`. I expect the very first link on the page, but this returns a list of multiple anchor elements. Calling `$x("//body//a[2]")` returns two anchor elements. Calling `$x("//body//a[3]")` returns nothing. I was hoping that incrementing the `[x]` each time would give me each unique link one by one on the page, but they seem to be grouped. How can I rewrite this path so that I picks each anchor tag, one by one?

Original source