我正在 node js 版本 6 中的 puppeteer 工作。由于 node js 版本 6 不支持异步/等待,我需要一种在评估函数中获取全局变量的方法。
我尝试了以下但没有运气。
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
});
关于javascript - 如何在 puppeteer 中获取没有异步/等待的窗口的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744311/