Получить атрибут элемента страницы в pupeeter/apify
Я мог бы получить textContent HTML-элемента в Pupeeter:
var website_element = await page.$('a[itemprop="url"]');
var website= await (await website_element .getProperty('textContent')).jsonValue();
Тем не менее, иногда textContent недостаточно, смотрите следующий HTML:
<a itemprop="url" href="https://www.4-b.ch/de/4b-fenster-fassaden/home/">
https://www.4-b.ch/de/4b-fenster-fassad...</a>
результат неясен: " https://www.4-b.ch/de/4b-fenster-fassad... " с ... в конце.
Итак, мне лучше получить атрибут href.
Но когда:
var website_element = await page.$('a[itemprop="url"]');
var website = await (await website_element.getAttribute('href')).jsonValue();
В результате TypeError: website_element.getAttribute не является функцией
Любое предложение?
2 ответа
Есть простой и быстрый способ сделать это, используя функцию page.$ Eval:
var website = await page.$eval('a[itemprop="url"]', el => el.href);
какая page.$eval
делает то, что он сначала находит элемент в DOM, используя предоставленный селектор (первый аргумент), а затем вызывает обратный вызов (второй аргумент) с найденным элементом в качестве единственного аргумента. Возвращаемое значение обратного вызова становится возвращаемым значением page.$eval()
сам.
Оно работает:
var website_element = await page.$('a[itemprop="url"]');
var website = await (await website_element.getProperty('href')).jsonValue();