Получить атрибут элемента страницы в 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();
Другие вопросы по тегам