操纵up-访问外部范围变量失败

时间:2019-04-04 20:23:10

标签: javascript node.js puppeteer

 const pointName = 'xyz';

 await page.$eval('.popup-dialog input[name=name]', el => el.value =  pointName );

我不明白为什么pointName在此示例中无法解决,并且我得到了      Error: Evaluation failed: ReferenceError: pointName is not defined

有人可以启发我吗?

1 个答案:

答案 0 :(得分:2)

问题

您设置值的函数在页面上下文中运行。在该上下文中,Node.js环境中的变量是未知的,必须将其作为参数传递给您的函数。

解决方案

对于功能page.$eval,您传递以下参数:

  1. 选择器
  2. 功能:该功能的第一个参数将是元素。以下参数是该函数之后传递的参数。
  3. 任何可序列化的值:作为第三(甚至另一个参数)传递的任何值都将作为第二(或第三...)参数传递给函数。

将所有内容放在一起,您可以这样做:

await page.$eval(
    '.popup-dialog input[name=name]',
    (el, pointName) => el.value = pointName, // executed in the page context
    pointName // this is the variable from the Node.js environment
);