XPath получает ссылку и текст имени за один раз через JavaScript

  • Автор темы scriptml
  • 31
  • Обновлено
  • 16, May 2024
  • #1
Привет всем, в настоящее время у меня есть следующий код, собирающий ссылку на URL-адрес пользователя, а также его имя:
 

function getLinkAndNames() {

var nodes = "";

var nodes2 = "";

var p = "";

let i = 1;

let attr = "";

let attr2 = "";

const result = {

Data: []

};

for (var x = 0; x <= 16; x++) {

if (attr != null) {

p = "http://div[" + i + "]/div/div/div[1]/descendant::a[contains(@href, '?fr')]/@href";

p2 = "http://div[" + i + "]/div/div/div[1]/a/div/span/span/descendant::strong[contains(text(),' ')]";

nodes = document.evaluate(p, document, null, XPathResult.ANY_TYPE, null);

nodes2 = document.evaluate(p2, document, null, XPathResult.ANY_TYPE, null);

if (attr2 != null) {

result.Data.push({

href: attr.value,

name: attr2.innerText

});

i++;

attr2 = nodes2.iterateNext();

attr = nodes.iterateNext();

}

} else {

result.Data.push({

href: 'none',

name: 'none'

});

break;

}

}

return JSON.stringify(result,null,2);

}

console.log(getLinkAndNames());

Код (JavaScript). Приведенный выше код собирает необходимую информацию, но, похоже, всегда пропускает первого пользователя и пропускает его.

HTML-структура выглядит следующим образом: Красный контур — это ссылка пользователя, а синий контур — его имя.
XPath красный контур: Так чего мне здесь не хватает? Здесь JSFiddle https://jsfiddle.net/stealthrt/u6sr7p9d/

из вышеперечисленных.

scriptml


Рег
07 Jun, 2015

Тем
1

Постов
1

Баллов
11
  • 03, Jun 2024
  • #2
Учитывая катастрофу некомпетентности разметки, с которой вы пытаетесь работать, бросать в нее бессмысленно запутанный и трудный для работы с xpath мусор вряд ли является правильным ответом.

Я не уверен, чего вы на самом деле пытаетесь достичь, но первым шагом было бы взять этот HTML и всадить ему пулю в мозг.

Бесконечный бессмысленный DIV даром, бесконечные бессмысленные классы даром, бесконечные бессмысленные данные - скорее всего, бесполезные, ни единого намека на правильную семантическую разметку, статический стиль в разметке, привязки, оборачивающие DIV...

И это при условии, что вы удалили содержимое всех этих атрибутов, чтобы попытаться скрыть личность клиента и/или конфиденциальную информацию.

Нет НИЧЕГО, что я хотел бы сохранить от этого, а тем более устроить из этого еще больший беспорядок, наложив поверх него скрипттардеры.

Хотя, по всей вероятности, если предположить, что в каждом родительском DIV есть значимый класс, то, скорее всего, следует сделать getElementsByClassName, а затем DOM просматривает его содержимое, а не возиться с xpath.

Но я не смогу показать вам, как это сделать, если вы не предоставите классы и контент, которые позволят это сделать.
 

Arvixe


Рег
18 Nov, 2014

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно