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

Puppeteer 等待 url

Puppeteer 等待 url

绝地无双 2021-11-25 16:29:15
我没有头,我想等到用户重定向到某个页面。我可以waitForRequest从 puppeteer API使用,但我不知道确切的 url,它只是必须通过少数情况。所以我使用 waitForFunction 并检查那里的情况,但是当我重定向到正确的 URL 时,由于某种原因我需要刷新页面以传递情况。我的代码是:try {    await page.waitForFunction(() => {        if(window &&           window.location &&           window.location.hostname) {            const host = window.location.hostname.split('.');            if(!host.includes('www') &&               !host.includes('new') &&               host.includes('margonem') &&               host.length === 3) {                return true;            }        }    }, {        polling: 200,        timeout: 0    })} catch (e) {    console.log(e);}当我重定向到通过以上所有内容的 URL 时,我需要重新加载页面以实际看到它返回 true。为什么它像这样工作?我不希望用户在输入正确的页面后被迫刷新页面。
查看完整描述

3 回答

?
呼啦一阵风

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

我没有头,我想等到用户重定向到某个页面。


只需使用waitForNavigation()。


结合click确保您使用此模式:


const [response] = await Promise.all([

  page.waitForNavigation(waitOptions),

  page.click(selector, clickOptions),

]);

waitForNavigation 还返回一个您可以检查的响应对象


我可以使用 puppeteer API 中的 waitForRequest 但我不知道确切的 url 它只是必须通过少数情况。


在这种情况下,puppeteer 将请求作为参数注入,您可以在 lambda 函数中对其进行测试。例如:


page.waitForRequest(request => {

  return  request.url().includes('margonem') && request.method() === 'GET'

})


查看完整回答
反对 回复 2021-11-25
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

有时我们需要等到我们到达特定的 URL。


处理它的最好方法是


    let holdProgress = true;

        while (holdProgress) {

            await page.waitFor(300);

            if (page.url().includes('/env-selector')) {

                holdProgress = false;

            }

        }


查看完整回答
反对 回复 2021-11-25
?
qq_笑_17

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

我发现的最简单的方法是使用 waitForFunction,它很容易修改以适应您的规格以及紧凑。

  await page.waitForFunction("window.location.pathname == '/Welcome.aspx'")


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

添加回答

举报

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