Puppeteer:如何仅等待第一个响应(HTML)

use*_*605 3 node.js puppeteer puppeteer-cluster

我正在使用 puppeteer-cluster 来抓取网页。

如果我在每个网站上同时打开多个页面(8-10 个页面),连接速度会变慢,并且会出现许多超时错误,如下所示:

TimeoutError:超出导航超时:超出 30000 毫秒

我只需要访问每个页面的 HTML 代码。我不需要等待 domcontentloaded 等。

有没有办法告诉page.goto()仅等待来自网络服务器的第一个响应?或者我需要使用另一种技术来代替木偶操作者?

Md.*_*her 5

domcontentloaded第一个 html 内容的事件。

DOMContentLoaded 事件在初始 HTML 文档完全加载和解析后触发,无需等待样式表、图像和子框架完成加载。

以下内容将在加载初始 HTML 文档时完成加载。

await page.goto(url, {waitUntil: 'domcontentloaded'})
Run Code Online (Sandbox Code Playgroud)

但是,您可以阻止图像或样式表以节省带宽,并且在一次加载 10 个页面时加载速度更快。

将下面的代码放在正确的位置(在使用导航之前page.goto),它将停止加载图像、样式表、字体和脚本。

await page.setRequestInterception(true);
page.on('request', (request) => {
    if (['image', 'stylesheet', 'font', 'script'].indexOf(request.resourceType()) !== -1) {
        request.abort();
    } else {
        request.continue();
    }
});
Run Code Online (Sandbox Code Playgroud)