首页 >web前端 >js教程 >为什么使用'querySelectorAll”时'page.evaluate”返回空对象?

为什么使用'querySelectorAll”时'page.evaluate”返回空对象?

Patricia Arquette
Patricia Arquette原创
2024-11-13 13:50:02256浏览

Why Does `page.evaluate` Return Empty Objects When Using `querySelectorAll`?

page.evaluate querySelectorAll 返回意外的空对象数组

将 Puppeteer 的 page.evaluate 函数与 querySelectorAll 结合使用时,用户可能会遇到以下问题:返回的数组包含空对象。

原因:

从 page.evaluate 函数返回的值必须是 JSON 可序列化的。默认情况下,HTML 元素不经修改不可序列化为 JSON。

解决方案:

要解决此问题,应将从 HTML 元素中提取的数据修改为 JSON可序列化格式。例如,如果所需的数据是元素的 href 值,则可以使用以下代码片段:

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

此代码从元素中提取 href 值并将它们作为字符串数组返回,这是 JSON 可序列化的。通过修改返回值,可以避免空对象的问题。

以上是为什么使用'querySelectorAll”时'page.evaluate”返回空对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

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