如何在puppeteer中获取没有异步/等待的窗口的全局变量

时间:2018-12-12 13:37:51

标签: javascript node.js 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());

1 个答案:

答案 0 :(得分:1)

执行evaluate方法时,它实际上是在页面上下文中执行的。在您的远程浏览器中。因此,这就是为什么您看不到console.log语句的任何输出的原因:它们实际上是在浏览器中执行的,而不是被执行并输出到终端/命令行窗口。

对于您想做的事情,您应该可以执行以下操作:

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