javascript - 无法读取未定义的外部 page.evaluate() 属性 'map'

标签 javascript node.js undefined puppeteer

考虑以下代码:

let foo = await page.evaluate(
  () => {
    let bar = [...document.querySelectorAll(".foobar")];
    return bar.map( (u) => u.textContent.trim() );
  }
);
foo.forEach( (u) => { console.log(u); });

现在考虑这个变体:

let bar = await page.evaluate(
  () => {
    return [...document.querySelectorAll(".foobar")];
  }
);
let foo = bar.map((u) => u.textContent.trim());
bar.forEach( (u) => { console.log(u); } );

我希望两者都记录相同的结果,但实际上前者运行良好,后者抛出

Cannot read property 'map' of undefined

有人可以解释为什么我不能从 page.evaluate() 中取出 map() 吗?

FWIW,page 是一个puppeteer NewPage()

最佳答案

传递给 page.evaluate 的函数被序列化并通过网络发送到浏览器,然后在浏览器中执行。这意味着返回值也必须通过网络发送,因此 serialisable .元素列表不可序列化。

作为mentioned in the documentation ,如果函数的返回值不可序列化,则返回 undefined。

关于javascript - 无法读取未定义的外部 page.evaluate() 属性 'map',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55665954/

相关文章:

javascript - Mongoose 独特的不工作

php - JavaScript 相当于 PHP 的 __get() 魔法方法

node.js - true require() 用于代码而不是文件

Node.js、Express 和 css、js、图片资源

reactjs - react 环境变量.env返回未定义

java - 致命异常 : main Unable to start activity ComponentInfo Caused by java. lang.NullPointerException

javascript - 如何在nodejs中编写数据库模块

javascript - 如何在 RxJS(或 Reactive Extensions 中的通用)中实现时间过期热观察

javascript - 如何从 URL 获取动态值

javascript - 在js文件中调用Express.js的函数