Asyn c / ожидать доступа к внешней переменной - PullRequest
0 голосов
/ 12 июля 2020
const puppeteerOTPTrigger = async ({ username, password }) => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto("example.com");
  await Promise.all([page.waitForNavigation(), page.click("div")]);
 
  await page.$eval("#Login_userName", (el) => {
    return (el.value = username); // in this line i am getting the error 
                                     ReferenceError: username is not defined
  });
  await page.$eval("#Login_password", (el) => (el.value = "password")); static value woking 
 
};

В приведенном выше примере я не могу получить доступ к переменной «username» внутри функции обратного вызова await.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Это не имеет ничего общего с async/await. Это потому, что кукольник выполняет ваш обратный вызов в контексте страницы, а не в контексте вашей программы.

Вы должны передать аргумент имени пользователя в качестве другого аргумента в .$eval(). Тогда вы сможете получить к нему доступ в качестве аргумента обратного вызова.

await page.$eval("#Login_userName", (el, name) => {
  return (el.value = name); // use the argument you passed
}, username);
0 голосов
/ 12 июля 2020

это невозможно, потому что username доступен в Nodejs среде выполнения, а el.value = username выполняется в браузере (где имя пользователя недоступно).

...