puppeteer может передавать два типа данных между Node.js и контекстом браузера: сериализуемые данные (т.е. данные, которые поддерживаются JSON.stringify()
/ JSON.parse()
) и идентификаторы объектов JavaScript (включая элементы DOM) - JSHandle и ElementHandle.Более поздние имеют немного более сложный API (см. Методы JSHandle и ElementHandle или методы, которые их упоминают).
page.evaluate()
может передавать только сериализуемые данные, а вместо несериализуемых данных возвращает undefined
илипустые предметы.Элементы DOM не сериализуемы, поскольку содержат циклические ссылки и методы.
Поэтому, если вам просто нужны некоторые атрибуты текста или элемента, попробуйте выполнить большую часть обработки в контексте браузера и вернуть только сериализуемые данные.