【发布时间】:2018-06-25 03:42:51
【问题描述】:
我有一个非常简单的 Puppeteer 脚本,它使用 exposeFunction() 在无头 Chrome 中运行某些东西。
(async function(){
var log = console.log.bind(console),
puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
var functionToInject = function(){
return window.navigator.appName;
}
await page.exposeFunction('functionToInject', functionToInject);
var data = await page.evaluate(async function(){
console.log('woo I run inside a browser')
return await functionToInject();
});
console.log(data);
await browser.close();
})()
这失败了:
ReferenceError: window is not defined
指的是注入函数。如何在无头 Chrome 中访问window?
我知道我可以改为 evaluate(),但这不适用于我动态传递的函数:
(async function(){
var log = console.log.bind(console),
puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
var data = await page.evaluate(async function(){
console.log('woo I run inside a browser')
return window.navigator.appName;
});
console.log(data);
await browser.close();
})()
【问题讨论】:
-
我不太确定为什么会这样,但您可以将
window作为变量传递并在您的函数中使用它。 -
你确定吗?
Unhandled promise rejection (rejection id: 1): Error: Evaluation failed: TypeError: Converting circular structure to JSON -
第二个脚本不起作用是什么意思?它会抛出与第一个相同的错误吗?
标签: node.js google-chrome headless-browser puppeteer