首页 > 解决方案 > 有没有办法将全局变量传递给 $$eval 函数?

问题描述

我正在使用 page.$$eval 在浏览器上下文中评估 div#Menu 。但是,我需要将 const 变量 myVar 中的值传递到浏览器上下文中,以便在该上下文中执行比较。但是,我在使用 $$eval 时遇到了范围界定问题。有没有解决的办法?

这是我制作的代码:

const myVar = 100;
const menuData = await page.$$eval("div#Menu", (Menu1) => {
   return Menu1.map((Menu1Element) => {
   console.log(myVar); //testing to see if myVar is passed into browser context
   ...
   })[0];
}).catch(console.error);

我得到的错误消息 => 错误:评估失败:ReferenceError:myVar 未定义

标签: javascriptpuppeteer

解决方案


这是签名: page.$$eval(selector, pageFunction[, ...args])

因此,您可以将 args 作为 pageFunction args 传递($$eval 中的第 3 个参数,这些将作为 args 传递给您的函数。

这是更新的代码片段。

const myVar = 100;
const menuData = await page.$$eval("div#Menu", (Menu1, varInsideFunction) => {
   return Menu1.map((Menu1Element) => {
   console.log(varInsideFunction); //testing to see if myVar is passed into browser context
   ...
   })[0];
}, myVar).catch(console.error);

推荐阅读