Нужна помощь с DOMParser (или с XMLHttpRequest).
Здравствуйте.
Сразу скажу, что прежде чем написать сюда некоторое время гуглил, но ничего толкового не нашел. Мой вопрос заключается в следующем. Есть у меня определенная страница, с которой я хочу получить все элементы с определенным классом. Вот к какому коду я пришел:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://site.ru', false);
xhr.send();
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(xhr.response,"text/xml");
var tds = xmlDoc.getElementsByClassName("mar_t");
console.log(tds);
Но в результате выдается пустой ответ. Если после xhr.send(); я делаю console.log(xhr.response);, то мне выдается абсолютно весь код запрашиваемой страницы, но мне нужен просто список объектов с указанным классом. Что я делаю не так? |
var tds = document.querySelectorAll(".mar_t")
|
Если классы добавляются скриптом, то найти элементы по классу не получится
|
А если применить XPath?
var XPIter = document.evaluate("//*:*[contains(' '+@class+' ', ' mar_t ']");
var tds=[];
var next;
while((next = XPIter.iterateNext())!=null)
tds.push(next);
Так же надо убедиться что документ действительно корректно распарсился как XML. |
Нашел решение. На него меня навела фраза о том, что классы добавляются скриптом. То есть страница не полноценная и надо сделать ее полноценным HTML.
Вот мое решение:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://site.ru', false);
xhr.send();
var tempElement = document.createElement('div');
tempElement.innerHTML = xhr.responseText;
var message = tempElement.querySelectorAll('a.mar__t');
for (i = 0; i < message.length; i++) {
console.log(message[i]);
}
createElement('div'); нужен для того, чтобы обозначить абстрактную позицию полученного кода на странице, конкретизировать его место на странице я не стал, т.к. мне не нужно фактически размещать полученное на странице где выполняется скрипт. Чем можно заменить этот момент я не придумал :) (хотя и сам считаю что это какой то говнокод). |
vanished
|
vanished
|
| Часовой пояс GMT +3, время: 04:58. |