自动记录网络选项卡,而无需在Google Chrome中打开它

时间:2017-01-21 13:14:39

标签: google-chrome google-chrome-extension google-chrome-devtools

我需要将网络标签中显示的信息记录到文件中。我可以通过首先触发网络选项卡然后将其导出到文件来完成。但是,当Chrome打开时,是否可以自动运行网络选项卡并将其导出到后台文件中?

有可能吗?

2 个答案:

答案 0 :(得分:3)

这取决于您的要求。如果您的扩展程序涉及DevTools,因此它已打开,您可以使用chrome.devtools.network.getHAR()方法获取网络流量。您无需导航到“网络”选项卡。

但是,如果要在不打开DevTools的情况下访问网络数据,则此API将无法运行,因为它仅暴露给DevTools实例。有几种可能的选择。

选项1

您可以使用chrome.webRequest API拦截每个请求/响应,并将您想要/可以包含的任何数据附加到对象。然后,您可以使用chrome.downloads API下载数据。在您的情况下,您可以使用数据URI。

var url = 'data:application/json;base64,' + btoa(data);
chrome.downloads.download({url: url, filename: 'notQuiteAHAR'json'});

我在实践中没有对此进行过测试,我不太确定您是否可以在调用下载之前确定所有请求何时完成。

选项2

根据@wOxxOm的评论,使用更低级别的chrome.debugger API。调试协议一次只允许调试器的一个实例,因此只有在没有运行DevTools的情况下才能使用。 API公开了比chrome.webRequest API更多的内容,但需要一些工作才能获得所需的所有数据。

有一个名为chrome-har-capturer的存储库,它使用调试协议。特别感兴趣的是har.js,它使用在调试器API中找到的事件来手动构建HAR。该库的目的是用于远程调试,但我相信您可以在扩展中使用调试器API,因此您可能使用此存储库的各个方面。

答案 1 :(得分:0)

根据 Gideon Pyzer 的建议,HAR Recorder 使用 chrome 调试协议记录 HAR 并生成 har 文件(无需打开 devtools)。如果你想要一个变体,你可以分叉并对其进行更改。