Comment sélectionner tous les liens d'une page à l'aide de XPath
Je veux écrire une fonction qui identifie tous les liens sur une page HTML. Mon idée était d'utiliser XPath, à l'aide d'un chemin d'accès tel que //body//a[x]
et l'incrémentation de x pour passer à travers la première, deuxième, troisième lien sur la page.
Tout en essayant de Chrome, je charge la page http://exoplanet.eu/ et dans les Outils de développement Chrome JS console, je lance un appel $x("//body//a[1]")
. J'attends le premier lien sur la page, mais cela renvoie une liste de plusieurs éléments d'ancrage. L'appel de $x("//body//a[2]")
retourne deux éléments d'ancrage. L'appel de $x("//body//a[3]")
ne retourne rien.
J'espérais que l'incrémentation de la [x]
à chaque fois me donnerait chaque lien unique, un par un, sur la page, mais ils semblent être regroupés. Comment puis-je réécrire ce chemin afin que je récupère chaque balise d'ancrage, un par un?
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez le chemin d'accès
//body/descendant::a[1]
,//body/descendant::a[2]
et ainsi de suite, vous pouvez sélectionner tous les descendantsa
éléments de labody
élément. Ou avec votre tentative, vous avez besoin d'accolades par exemple(//body//a)[1]
,(//body//a)[2]
et ainsi de suite.Note cependant qu'à l'intérieur du navigateur avec Javascript il y a un
document.links
de collecte dans le modèle d'objet donc pas de XPath nécessaires pour accéder aux liens.Votre
//body//a[1]
devrait être(//body//a)[1]
si vous souhaitez sélectionner le premier lien sur la page. L'ancienne expression sélectionne n'importe quel élément qui est le premier enfant de son élément parent.Mais il semble très étrange chose à faire de toute façon. Pourquoi avez-vous besoin de la des liens un par un? Il suffit de sélectionner tous d'entre eux, comme un nœud-liste ou un node-set, à l'aide de
//body//a
, puis itérer sur l'ensemble.