【问题标题】:Is there a way to pass a global variable into an $$eval function?有没有办法将全局变量传递给 $$eval 函数?
【发布时间】:2020-12-14 03:14:36
【问题描述】:

我正在使用 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 未定义

【问题讨论】:

  • page.$$eval(selector, pageFunction[, ...args]) 您需要将变量作为参数传递并在 pageFunction 定义中声明它们。这应该类似于此处的答案:stackoverflow.com/questions/46088351/…

标签: javascript puppeteer


【解决方案1】:

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

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

这是更新后的代码sn-p。

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);

【讨论】:

  • 这行得通。太感谢了。感激不尽!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2021-01-08
  • 2013-02-09
  • 2022-01-14
相关资源
最近更新 更多