考虑以下代码:
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/