获取Puppeteer中被阻止的请求的列表

时间:2018-07-03 16:30:11

标签: puppeteer google-chrome-headless

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

page.on('requestfailed', request => {
        console.log(request.url());
        console.log('failed');
    });

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

page.on('request', request => { 
   console.log(request.url());
}

还有其他可以听的活动吗?

编辑:

我可以看到使用时出现故障

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

,但请求var未定义。所以我不知道哪个请求失败。

1 个答案:

答案 0 :(得分:2)

了解了解决方法

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;
});

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

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