我正在使用Node js版本6中的puppeteer。由于Node js版本6不支持async / await,因此我需要一种方法来获取评估函数中的全局变量。
我尝试了以下方法,但是没有运气。
let _browser;
let _page;
puppeteer
.launch()
.then(browser => (_browser = browser))
.then(browser => (_page = browser.newPage()))
.then(page => page.goto('https://mywebsite.com')) // not actual page
.then(() => _page)
.then((page) => page.evaluate(()=>{
console.log("sdasd");// no output here
console.log(globalvar); // its the global variable
console.log("aaaaa"); // no output here
return Promise.resolve("a")
})
)
.then(() => _browser.close());
当我尝试拍摄屏幕截图时
puppeteer
.launch()
.then(browser => (_browser = browser))
.then(browser => (_page = browser.newPage()))
.then(page => page.goto('https://example.com'))
.then(() => _page)
.then(page => page.screenshot({ path: 'example.png' }))
.then(() => _browser.close());
最佳答案
当您执行evaluate
方法时,它实际上是在页面上下文中执行的。在您的远程浏览器中。因此,这就是为什么您看不到console.log
语句的任何输出的原因:它们实际上是在浏览器中执行的,而不是被执行并输出到终端/命令行窗口。
对于您想做的事情,您应该可以执行以下操作:
.then((page) => {
return page.evaluate(() => {
return globalVar;
});
})
.then((globalVarHere) => {
console.log(globalVarHere); // Should output the value
});