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

标签 javascript node.js puppeteer

我正在 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/

相关文章:

javascript - 如何让一些暴露模块代码仅在 DOM 准备好后运行?

javascript - 删除带索引的动态表

javascript - 在 libsodium 中使用哪种 key 对类型?各自有什么不同的能力?

node.js - Mongoose模型架构和Node需要顺序

javascript - TypeScript 接口(interface)是否应该在 *.d.ts 文件中定义

php - socket.io 中的 app.post ('/posts' 带有 https

google-chrome - 在 Puppeteer 中如何在控制台中捕获 Chrome 浏览器日志

javascript - Electron 应用程序显示白屏但在 CentOS 8 上呈现

javascript - 如何从 Puppeteer 中的 page.evaluate() 返回数据,当 JavaScript 中的浏览器中有 Promise.all() 时

javascript - 使用 Puppeteer 滚动页面的侧栏