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

Cannot read property 'map' of undefined outside page.evaluate()

考虑以下代码:

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,pagepuppeteer NewPage()

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

mentioned in the documentation 一样,如果函数的 return 值不可序列化,则改为 returned 未定义。