如何在 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
});
我正在 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
});