为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2023-05-11 16:55:36
寻找一些反馈。在 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 循环是否会在导航发生时触发几次,和/或是否会破坏页面上下文。有没有比上面两种方法更好的方法呢?第一个确实有效,我很想保持原样。谢谢。
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您应该能够执行以下操作:


await page.waitForFunction((finalUrl) => {

  return document.location === finalUrl

}, {}, finalUrl).catch(retry)

但它可能更简单:


await page.waitForResponse(finalUrl).catch(retry)


查看完整回答
反对 回复 2023-05-11
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

也许是这样的:


if (page.url() !== finalURL) { // await is not needed here

    let t = 0;

    busy: while(t < 400) { // was '> 400' a typo?

        const [_, navigation] = await Promise.allSettled([

            page.click('#tryAgainLink'),

            page.waitForNavigation(),

        ]);


        if (navigation.status === 'fulfilled') break busy;


        t++;

        await page.waitForTimeout(1500);

    }

}


查看完整回答
反对 回复 2023-05-11
?
莫回无

TA贡献1865条经验 获得超7个赞

我使用这种方法:



async function isNavigation() {

  try {

    await page.evaluate(() => console.log('any code'))

    return false

  } catch (ex) {

    // check error, should be:

    // "Execution context was destroyed, most likely because of a navigation"

    return true

  }


}


查看完整回答
反对 回复 2023-05-11
  • 3 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信