Puppeteer page.waitforNavigation 不能在 1.8 中工作?

Puppeteer page.waitforNavigation not working in 1.8?

我无法让人偶操纵者等待导航。

根据文档 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()
]);

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

我什至试过以另一种方式翻转它们,之前暂停以防万一需要解决问题。

它实际上 "navigating" 不是另一个页面,但它正在执行客户端请求以加载页面的一部分,但我认为网络监控(空闲与否)- 应该选择这种东西.

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

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

感谢您的宝贵时间。

It is not actually "navigating" to another page , but it is doing client side requests to load part of the page , but I figured that netowrk monitoring ( idle or not ) - should pick up this sort of thing.

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

它会像这样,

  • 有导航(不是 URL 更改,而是实际的导航请求)
  • 有使用历史api。

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

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

下面是实现方法,

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

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