首页  >  文章  >  web前端  >  为什么 Puppeteer 的 `page.evaluate()` 和 `querySelectorAll` 返回空对象?

为什么 Puppeteer 的 `page.evaluate()` 和 `querySelectorAll` 返回空对象?

DDD
DDD原创
2024-11-11 18:38:02816浏览

Why Does Puppeteer's `page.evaluate()` With `querySelectorAll` Return Empty Objects?

理解 Puppeteer 的 page.evaluate() QuerySelectorAll 返回空对象

Puppeteer 的 page.evaluate() 方法是在其中执行 JavaScript 的强大工具浏览器,允许您与页面上的元素交互并检索信息。但是,有时您可能会遇到这样的问题:querySelectorAll() 方法返回空对象数组。

此问题源于以下事实:从评估函数返回的值必须是 JSON 可序列化的。元素和文档对象(如 querySelectorAll() 返回的元素和文档对象)无法直接序列化。

解决问题

要解决此问题,需要提取来自元素的所需信息并仅返回 JSON 可序列化数据。对于页面中的链接列表,您可以修改代码如下:

await page.evaluate((sel) => {
    let elements = Array.from(document.querySelectorAll(sel));
    let links = elements.map(element => {
        return element.href
    })
    return links;
}, sel);

此代码将从每个元素中提取 href 属性并返回一个字符串数组,可以是 JSON已连载。

以上是为什么 Puppeteer 的 `page.evaluate()` 和 `querySelectorAll` 返回空对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn