javascript - Puppeteer 如何检查页面是否已导航并在未导航时执行任务
问题描述
在登录页面上,我试图弄清楚是否出现了 google recaptcha。如果是这样,我想运行一段代码,否则像往常一样导航。
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 时,我该怎么做才能运行底部代码块?
我还尝试在 if recaptcha-token
is present 上有条件地运行代码块,但我检查了 dom 和 recaptcha 元素始终存在,并且只提示随机选择图像。基本上我有时可以导航而无需执行任何验证码,有时我会提示我选择图像。
谢谢!
解决方案
也许是这样的?
const [_, navigation] = await Promise.allSettled([
element.click(),
page.waitForNavigation(),
]);
if (navigation.status === 'fulfilled') /* There was navigation. */;
else /* There was timeout, no navigation. */;
推荐阅读
- spring - 如何在 JpaSpecificationExecutor#findAll 中按字符串字段作为数值排序
- json - 我是否必须考虑我的枚举编码密钥的每种情况?
- xml - 使用 XSLT 将所有子节点转换为兄弟节点
- ssh - 我想使用 gitlab ci 和 ssh 在我的网站服务器上推送我的 GitLab 代码,但是当我拉取时它无法正常工作
- pyinstaller - pyinstaller 未将数据文件复制到 ./dist 目录
- javascript - 如何在尝试在 node.js 中读取文件之前等待创建文件?
- android - 从 ForegroundService 获取活动
- php - 如何从返回 403 Forbidden 的站点中的 PHP 中的 URL 获取标题
- flutter - 如何在颤动中制作带有弹出菜单的浮动操作按钮?
- java - 如何在edittext上每10个字符后添加特定字符