获取 Puppeteer 中阻止的请求列表

Nil*_*ner 1 google-chrome-headless puppeteer

我正在尝试获取被浏览器阻止的请求列表(HTTPS 站点上的 HTTP)。我试过

page.on('requestfailed', request => {
        console.log(request.url());
        console.log('failed');
    });
Run Code Online (Sandbox Code Playgroud)

但它没有提供请求。我看到的唯一请求是那些不再存在的 URL。被阻止的 (HTTP) 请求也不会触发请求事件。

page.on('request', request => { 
   console.log(request.url());
}
Run Code Online (Sandbox Code Playgroud)

还有其他活动我可以收听吗?

编辑:

当我使用时我可以看到有些东西失败了

page._client.on('Network.loadingFailed', async event => {
        const request = await page._networkManager._requestIdToRequest.get(event.requestId);
        console.log(event);
        console.log(request);
    });
Run Code Online (Sandbox Code Playgroud)

但请求变量未定义。所以我不知道哪个请求失败了。

Nil*_*ner 5

找到了如何解决这个问题

page._client.on('Network.loadingFailed', async event => {
    if (requestToBySend[event.requestId] !== undefined) {
        let reason = '';
        if (event.blockedReason !== undefined) {
            reason = event.blockedReason;
        } else {
            reason = event.errorText;
        }
        console.log('blocked: ' + requestToBySend[event.requestId] + '; reason: ' + reason);
    }
});

page._client.on('Network.requestWillBeSent', async event => {
    requestToBySend[event.requestId] = event.request.url;
});
Run Code Online (Sandbox Code Playgroud)

requestId 在 requestWillbeSent 事件中已知。我只是存储这些 ID,以便在需要时查找它们。

我使用的 Chrome 事件可以在这里找到: https: //chromedevtools.github.io/devtools-protocol/tot/Network#event-loadingFailed