如何在 puppeteer 中获取没有 async/await 的 window 的全局变量

How to get global variable of window without async/await in puppeteer

我正在 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 语句的任何输出:它们实际上是在浏览器中执行的,而不是被执行并输出到您的终端/命令行 window.

对于您想做的事情,您应该可以这样做:

.then((page) => {
  return page.evaluate(() => {
    return globalVar;
  });
})
.then((globalVarHere) => {
  console.log(globalVarHere); // Should output the value
});