Кукловод — сбой доступа к переменной внешней области видимости

#javascript #node.js #puppeteer

#javascript #node.js #кукловод

Вопрос:

  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. Я делаю свою ставку. Проблема не с кукловодом

Ответ №1:

Проблема

Ваша функция, которая устанавливает значение, выполняется в контексте страницы. Переменные из 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
);