javascript - Puppeteer 流逻辑,检查是否发生导航(vs 等待)
问题描述
寻找一些反馈。在 Puppeteer 中,我想检查是否发生了导航,如果有则做某事,如果没有则做其他事情(例如再试一次)。我想出的两种方法是:
if (await page.url() != finalURL) {
let t = 0;
busy: while(t > 400) {
try {
await Promise.all([
await page.click('#tryAgainLink'),
await page.waitForNavigation(),
]);
break busy;
} catch(err) {
// navigation didn't happen
t++;
await page.waitForTimeout(1500);
}
}
}
但是我的理解是尝试/捕获流逻辑并不理想。我的替代方案是这样的:
let t = 0;
busy: while(await page.url() != finalURL) {
await page.click('#tryAgainLink');
await page.waitForTimeout(1500);
t++;
if(t > 400) {
break busy;
}
}
我想知道我是否应该waitForNavigatin
在那里有一个,但如果没有的话,我必须再次捕获抛出的错误。我的意思是对此进行测试,但我不确定await page.url()
while 循环是否会在导航发生时触发几次,和/或这是否会破坏页面上下文。
有没有比上述两种方法更好的方法?第一个确实有效,我很想保持原样。谢谢你。
解决方案
您应该能够执行以下操作:
await page.waitForFunction((finalUrl) => {
return document.location === finalUrl
}, {}, finalUrl).catch(retry)
但它可能更简单:
await page.waitForResponse(finalUrl).catch(retry)
推荐阅读
- reactjs - 如何在 React.Js 中将 FooterLink 路由到 InfoSection?
- javascript - 使用 React JS 中的复选框创建一个选定行的数组
- javascript - convert in to int to string
- react-native - 节点包的 mainBundlePath 为 Null
- python - 需要在 python 中创建或不创建类的情况下获取实例变量及其默认值
- reactjs - 是否需要在 facebook、twitter 或 LinkedIn 上注册 og:gatsby react 应用程序的标签?
- excel - 仅当它们相邻时在excel中突出显示重复的数字20
- node.js - 安全 API 请求成功,否则回滚
- javascript - 将文本文件中的特定文本插入 JavaScript 变量
- android - 如何从 React Native 中备份或导出 sqlite 数据库