无法读取未定义的外部page.evaluate()的属性“ map”

时间:2019-04-13 13:23:44

标签: 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); } );

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

  

无法读取未定义的属性“地图”

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

FWIW,pagepuppeteer NewPage()

1 个答案:

答案 0 :(得分:2)

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

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