寻找一些反馈。在 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);
}
}
}
但是我的理解是,对于流逻辑,try/catch 并不理想。我的替代方案是这样的:
let t = 0;
busy: while(await page.url() != finalURL) {
await page.click('#tryAgainLink');
await page.waitForTimeout(1500);
t++;
if(t > 400) {
break busy;
}
}
我想知道我是否应该在那里有一个 waitForNavigatin
,但如果没有,我又必须捕获抛出的错误。我的意思是测试这个,但我不确定 while 循环的 await page.url()
是否会在导航发生时触发几次,和/或是否会破坏页面上下文。
有没有比上面两种方法更好的方法呢?第一个确实有效,我很想保持原样。谢谢。
最佳答案
您应该能够执行以下操作:
await page.waitForFunction((finalUrl) => {
return document.location === finalUrl
}, {}, finalUrl).catch(retry)
但它可能更简单:
await page.waitForResponse(finalUrl).catch(retry)
关于javascript - Puppeteer 流程逻辑,检查导航是否发生(与等待),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64342023/