【发布时间】:2021-10-04 18:40:06
【问题描述】:
当以下构建运行时,我收到错误“错误:评估失败:ReferenceError:块未定义”作为控制台响应。在下一行中,我可以通过 console.log 访问 chunk[a],但是为什么我无法在 frame.evaluate 中访问呢?
const puppeteer = require('puppeteer');
const chunk= ["google.com","facebook.com","gmail.com","stackoverflow.com"];
(async () => {
for(var a=0;a<chunk.length;a++){
const browser = await puppeteer.launch({headless:false})
const page = await browser.newPage();
const iframeHandle = await page.$("frame[name='main']");
const frame = await iframeHandle.contentFrame();
console.log(chunk[a]);
await frame.evaluate(() => {
if(document.querySelector("#content > table").innerHTML.indexOf(chunk[a]) > -1){
console.log(chunk[a]);
}
});
}
})()
结果:google.com 评估失败:ReferenceError:未定义块
【问题讨论】:
-
evaluate的回调被序列化并在浏览器控制台中执行。这与您的 Node 应用程序完全不同,因此您必须使用 docs、frame.evaluate(chunk => {...}, chunks[a])中描述的args参数将可序列化数据传递给它(我会将chunk复数,因为它是一个数组)。
标签: javascript node.js async-await puppeteer evaluate