【问题标题】:Puppeteer page.waitforNavigation not working in 1.8?Puppeteer page.waitforNavigation 在 1.8 中不起作用?
【发布时间】:2018-10-01 15:39:59
【问题描述】:

我无法让 puppeteer 等待导航。

根据文档Here,示例是:

const [response] = await Promise.all([
  page.waitForNavigation(), // The promise resolves after navigation has finished
  page.click('a.my-link'), // Clicking the link will indirectly cause a navigation
]);

我的代码是:

const element = await page.waitForXPath(`${lineSelector.xpath}//a[contains(text(), 'Go')]`)

const [response] = await Promise.all([
  page.waitForNavigation(),
  element.click()
]);

一切正常......除了它不等待导航。我已经尝试了所有不同的选项:

  • 加载 - 考虑在加载事件发生时完成导航 被解雇了。
  • domcontentloaded - 在 DOMContentLoaded 事件被触发。
  • networkidle0 - 考虑导航 当网络连接数不超过 0 个时结束 至少 500 毫秒。
  • networkidle2 - 考虑完成导航 当至少 500 个网络连接不超过 2 个时 女士。

我什至尝试过将它们翻转过来,在需要解决问题之前暂停一下。

它实际上并没有“导航”到另一个页面,但它正在做客户端请求以加载页面的一部分,但我认为网络监控(空闲与否) - 应该接受这种事情。

我不能依赖选择器更改或 dom 突变,因为从一次单击到下一次,它们可能完全相同。

这是一个错误吗?还是我错过了什么?

感谢您的宝贵时间。

【问题讨论】:

    标签: puppeteer


    【解决方案1】:

    它实际上并没有“导航”到另一个页面,但它正在做客户端请求以加载页面的一部分,但我认为网络监控(空闲与否) - 应该接受这种事情。

    嗯,不! waitForNavigation 的意思正是它所说的。它等待导航。所以你不能指望它以其他方式表现。

    它会这样,当,

    • 有一个导航(不是 URL 变化,而是实际的导航请求)
    • 有history api的使用。

    如果你想看ajax请求,可以使用

    两者都有类似的方法来监控 ajax 请求。它可以是字符串或函数。

    这是如何实现的,

    await page.waitForRequest(request => request.url() === 'http://example.com' && request.method() === 'GET');
    

    它将等待具有指定 url 的请求。您可以根据需要使用任何类型的验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-07
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多