Fal*_*lko 5 javascript puppeteer
我正在使用 Puppeteer 解析网页,但找不到我的问题的明确答案。
我试图将一个函数作为参数传递给page.evaluate() 一个对象可以传递但似乎无法传递一个函数。这是一个人为的例子:
const obj = {
thing: 'thing1',
};
const myfunction = () => {
return `great ${stuff}`;
};
await page.evaluate((obj, function)=>{
const thing = myfunction;
},(obj, function));
Run Code Online (Sandbox Code Playgroud)
是否可以将函数作为参数传递给 puppeteers page.evaluate()?
不,你不能传递这样的函数。传递的数据需要通过 序列化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');
Run Code Online (Sandbox Code Playgroud)
替代方法:在里面定义函数 page.evaluate
要在页面上下文中使用函数,您可以在上下文中定义它。这样,该函数就无法访问您的 Node.js 变量。
await page.evaluate((obj) => {
const myfunction = (stuff) => `great ${stuff}`;
return myfunction(obj); // 'great example'
}, 'example');
Run Code Online (Sandbox Code Playgroud)