gpt4 book ai didi

javascript - Puppeteer 流程​​逻辑,检查导航是否发生(与等待)

转载 作者:行者123 更新时间:2023-12-04 17:24:24 24 4
gpt4 key购买 nike

寻找一些反馈。在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com