javascript - 如何避免“框架分离”错误异步验证或使用 Puppeteer 重定向?
问题描述
先前的回答为我指明了方向,即如何捕获异步验证错误或重定向。但在我的场景中,一个iframe
开始发挥作用,它让我整天都很忙。一些指向正确方向的指针会非常有帮助,因为我无法做到正确,即使错误清楚地说明了哪里出了问题。
场景如下:
- 输入为空。在 iframe 内单击按钮,异步请求返回验证错误
- 输入具有值。在 iframe 内单击一个按钮,用户将被重定向到一个显示“yaay”的页面。
在第二种情况下抛出的错误状态waitForFunction failed: frame got detached
。这是有道理的,因为框架不再存在......我找到了frame.isDetached()
但仍然抛出同样的错误。我缺少什么或如何使用此方法使其工作?
let frame = (await page.frames())[0];
...
for (let action of actions) {
if (action.type === '...') {
// ...
}
if (action.type === 'click') {
frame.click("#btn");
// works for scenario 1
await Promise.race([
page.waitForNavigation({ waitUntil: "networkidle2" }),
// ERROR THROWN HERE FOR SCENARIO 2
// `waitForFunction failed: frame got detached`
// the line below doesn't seem to work as well...
// frame.isDetached() ? Promise.resolve() : frame.waitForSelector(".error")
frame.waitForSelector(".error"),
]);
if (await frame.$(".error")) {
// there was an error
} else {
// the page changed
if (await page.waitForFunction('document.querySelector("body").innerText === "finished"')) {
// yeeey
}
}
}
}
解决方案
推荐阅读
- java - 重新填充时 RecyclerView 空对象引用错误
- azure - 如何使用 Az PowerShell 模块获取 Azure webapp config appsettings
- codeigniter - 解密显示错误身份验证失败
- shopify - Liquid / Shopify - CSS 中的变量
- python - Flask 服务器无法在 apache2 上运行,即使没有它也可以运行
- android - 有没有办法用 adb 禁用应用程序活动?
- amazon-web-services - Aws Cognito:如何使用自定义属性在无服务器堆栈中授权用户?
- python - Elastic Beanstalk,Django 部署错误,找不到满足要求的版本 pkg-resources==0.0.0
- python - CSV 文件重新格式化
- python - Python:在列表中查找内容