我正在使用Puppeteer解析网页,但找不到针对我问题的明确答案。
我正在尝试将函数作为参数传递给page.evaluate()
,虽然可以传递对象,但似乎无法传递函数。这是一个人为的例子:
const obj = {
thing: 'thing1',
};
const myfunction = () => {
return `great ${stuff}`;
};
await page.evaluate((obj, function)=>{
const thing = myfunction;
},(obj, function));
是否可以将函数作为参数传递给伪造者page.evaluate()?
答案 0 :(得分:1)
不,您不能传递类似的功能。传递的数据需要通过JSON.stringify
进行序列化,这对于函数是不可能的。
替代方法:公开功能
要在页面内的Node.js环境中使用函数,您需要通过page.exposeFunction
公开它。当调用该函数时,将在您的Node.js环境中执行
await page.exposeFunction('myfunction', text => `great ${text}`);
await page.evaluate(async (object) => {
return await window.myfunction(object); // 'great example'
}, 'example');
替代方法:在page.evaluate
要在页面上下文中使用函数,可以在上下文中定义它。这样,该函数将无法访问您的Node.js变量。
await page.evaluate((obj) => {
const myfunction = (stuff) => `great ${stuff}`;
return myfunction(obj); // 'great example'
}, 'example');