首页 > 解决方案 > Puppeteer:page.goto waitUntil 选项是否包括打开的网络套接字?

问题描述

我在 docker 容器中使用 node js v10 和 puppeteer v1.10。

我需要截取一个打开了 2 个 Web 套接字的页面。一旦页面加载,它们就会返回一些数据,但之后它们会保持空闲状态。当我中止对 Web 套接字端点的请求时,页面会正确加载并且我可以截屏。如果我不这样做,puppeteer 会抛出超时错误 ( Navigation Timeout Exceeded: 120000ms)。该选项是否page.goto(url, {waitUntil: 'networkidle0'});包括 web 套接字(在这种情况下,连接保持打开但永远空闲)或只是对 css / image / api 资源的正常请求?

目前,如果我设置,我可以截屏:

page.on('request', (request) => {
    if(request.url().includes('socket.io')) {
      console.log("Blocking websocket: ", request.url());
      request.abort();
      return;
    }
  request.continue();
});
page.goto(url, {waitUntil: 'networkidle0'});

标签: puppeteer

解决方案


在打开 websocket 连接之前,socket.io 将尝试使用 ajax 进行轮询,然后在另一个请求中它会切换协议,说“101 Switching Protocols”。

waitUntil不会等待 websocket 连接,因为它们通常永远挂起。如果 websocket 服务器已关闭,则阻止它是正确的。

这是网络选项卡上的样子。

在此处输入图像描述


推荐阅读