Как выбрать все ссылки на странице с помощью XPath

Я хочу написать функцию, которая идентифицирует все ссылки на определенной HTML-странице. Моя идея состояла в том, чтобы использовать XPath, используя путь, такой как //body//a[x] и увеличивая x, чтобы пройти первую, вторую, третью ссылку на странице.

Испытывая это в Chrome, я загружаю страницу http://exoplanet.eu/ и в консоли Chrome Developer Tools JS я вызываю $x("//body//a[1]"), Я ожидаю самую первую ссылку на странице, но она возвращает список из нескольких элементов привязки. призвание $x("//body//a[2]") возвращает два элемента привязки. призвание $x("//body//a[3]") ничего не возвращает.

Я надеялся, что увеличение [x] каждый раз давал мне каждую уникальную ссылку по одной на странице, но они, похоже, сгруппированы. Как я могу переписать этот путь так, чтобы я выбирал каждый тег привязки один за другим?

2 ответа

Решение

Если вы используете путь //body/descendant::a[1], //body/descendant::a[2] и так далее можно выбрать всех потомков a элементы body элемент. Или с вашей попытки вам нужны брекеты, например (//body//a)[1], (//body//a)[2] и так далее.

Обратите внимание, что внутри браузера с Javascript есть document.links коллекция в объектной модели, поэтому XPath не требуется для доступа к ссылкам.

Ваш //body//a[1] должно быть (//body//a)[1] если вы хотите выбрать первую ссылку на странице. Прежнее выражение выбирает любой элемент, который является первым дочерним элементом его родительского элемента.

Но это все равно кажется странным. Зачем вам нужны ссылки одна за другой? Просто выберите все из них, как список узлов или набор узлов, используя //body//a, а затем перебрать множество.

Другие вопросы по тегам