伪造者page.waitforNavigation无法在1.8版中使用?

时间:2018-10-01 06:23:07

标签: 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()
]);

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

  • load-当load事件发生时,认为导航已完成 被解雇。
  • domcontentloaded-考虑到导航完成时 触发DOMContentLoaded事件。
  • networkidle0-考虑导航 当网络连接数不超过0时完成 至少500毫秒。
  • networkidle2-考虑完成导航 当至少有500个网络连接不超过2个时 毫秒。

我什至尝试以另一种方式翻转它们,在需要解决之前先暂停一下。

它实际上不是在“导航”到另一个页面,但是它正在执行客户端请求以加载页面的一部分,但是我认为netowrk监视(是否空闲)应该采取这种方式。

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

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

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

  

它实际上不是在“导航”到另一个页面,但是它正在执行客户端请求以加载页面的一部分,但是我认为netowrk监视(是否空闲)应该采取这种方式。

好吧,不! waitForNavigation的含义与所说的完全一样。它等待导航。因此,您不能指望它会以其他方式运行。

它会在这种情况下发挥作用,

  • 存在导航(不是URL更改,而是实际的导航请求)
  • 存在历史记录api。

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

两者都有相似的方法来监视ajax请求。它可以是字符串,也可以是函数。

这里是实现方法,

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

将等待具有指定网址的请求。您可以根据需要使用任何一种验证方式。