UnhandledPromiseRejectionWarning:ReferenceError:浏览器未定义用于使用 puppeteer 进行 azure 登录

Jyo*_*ick 0 javascript headless puppeteer

我正在尝试使用 puppeteer 自动化在 azure 门户上运行的应用程序。输入密码后我收到以下错误,它没有单击提交按钮。

node:55768) UnhandledPromiseRejectionWarning: ReferenceError: browser is not defined
Run Code Online (Sandbox Code Playgroud)

这是我的示例代码:

(async () => {
  
  try {
    const launchOptions = { headless: false, args: ['--start-maximized'] };
    const browser = await puppeteer.launch(launchOptions);
    const page = await browser.newPage();
    await page.emulate(iPhonex);
    await page.goto('https://apps.testpowerapps.com/play/72ff5b93-2327-404d-9423-92eedb44a287?tenantId=n082027');
     
      //Enter User Name
      const [userName] = await page.$x('//*[@id="i0116"]');
      await userName.type("jyoti.m@azure.com");
        const [loginButton] = await page.$x('//*[@id="idSIButton9"]');
        await loginButton.press('Enter');
   
       //Enter Password
      const [passWord] = await page.$x('//*[@id="i0118"]');
      await passWord.type("Pass123");
        
        const [submitButton] = await page.$x('//*[@id="idSIButton9"]');
        await submitButton.press('Enter');
        //await page.keyboard.press('Enter');

  }
  catch(error){
  console.error(error);
  }
  finally {
    await browser.close();
  }
})();
Run Code Online (Sandbox Code Playgroud)

两种方式都尝试过,但都不起作用,唯一的问题是两个页面的 xpath 是相同的。

 const [submitButton] = await page.$x('//*[@id="idSIButton9"]');
    await submitButton.press('Enter');
    //await page.keyboard.press('Enter');
Run Code Online (Sandbox Code Playgroud)

任何解决此问题的线索。

sas*_*hee 5

您可以browser在 中定义该值try,但也可以在 中使用它catchconsts 是块作用域的,因此它们与块绑定在一起,因此不同的块(finally)看不到它。

问题是这样的:

  try {
    const browser = ...;
  }
  finally {
    // different block!
    await browser.close();
  }
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请将browser以下内容移出try-catch

  const browser = ...
  try {

  }
  finally {
    await browser.close();
  }
Run Code Online (Sandbox Code Playgroud)

这样它就可以在finally块中使用。