javascript - Puppeteer 如何检查页面是否已导航并在未导航时执行任务

标签 javascript html node.js puppeteer browser-automation

在登录页面上,我试图确定谷歌验证码是否出现。如果是这样,我想运行一段代码,否则像往常一样导航。

await page.goto(
    url
  );
  await page.waitForSelector("#username");
  await page.type("#username", process.env.EMAIL);
  await page.type("#password", process.env.PSWD);
  await  page.$eval("#signIn > div > button", (el) => el.click()) //this line sometimes triggers recaptcha

  {//here wait for navigation and check if google captcha appears}

  //then run the following code:
  await page.solveRecaptchas();
  await Promise.all([
    page.waitForNavigation(),
    page.click("#signIn"),
  ]);

我尝试过使用 page.waitForNavigation 但如果出现 recaptcha 则会导致超时。仅当 google recaptcha 出现时,我该怎么做才能运行底部代码块?

我还尝试在存在 recaptcha-token 的情况下有条件地运行代码块,但我检查了 dom 和 recaptcha 元素始终存在,并且仅提示随机选择图像。基本上我有时可以导航而无需执行任何验证码,有时系统会提示我选择图像。

谢谢!

最佳答案

也许是这样的?

const [_, navigation] = await Promise.allSettled([
  element.click(),
  page.waitForNavigation(),
]);

if (navigation.status === 'fulfilled') /* There was navigation. */;
else /* There was timeout, no navigation. */;

关于javascript - Puppeteer 如何检查页面是否已导航并在未导航时执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64669821/

相关文章:

jquery - HTML 中的交互式 SVG,正确的方法

html - css继承子属性

node.js - 使用 express-jwt 基于角色的授权?

node.js - 如何使用nodejs将mongo中的大集合保存到文本文件中?

javascript - 对 angularJS 中的范围感到困惑

javascript - DOMContentLoaded 上的 document.readyState?

html - 如何制作斜线而不是字母的文本?

node.js - AWS Elastic Beanstalk NodeJS 和日志

Javascript 无法从数组获取 document.getElementById ('cs' )

javascript - Sequelize : A is not associated to B"nodejs