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?
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.