我需要将网络标签中显示的信息记录到文件中。我可以通过首先触发网络选项卡然后将其导出到文件来完成。但是,当Chrome打开时,是否可以自动运行网络选项卡并将其导出到后台文件中?
有可能吗?
答案 0 :(得分:3)
这取决于您的要求。如果您的扩展程序涉及DevTools,因此它已打开,您可以使用chrome.devtools.network.getHAR()
方法获取网络流量。您无需导航到“网络”选项卡。
但是,如果要在不打开DevTools的情况下访问网络数据,则此API将无法运行,因为它仅暴露给DevTools实例。有几种可能的选择。
您可以使用chrome.webRequest
API拦截每个请求/响应,并将您想要/可以包含的任何数据附加到对象。然后,您可以使用chrome.downloads API下载数据。在您的情况下,您可以使用数据URI。
var url = 'data:application/json;base64,' + btoa(data);
chrome.downloads.download({url: url, filename: 'notQuiteAHAR'json'});
我在实践中没有对此进行过测试,我不太确定您是否可以在调用下载之前确定所有请求何时完成。
根据@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)。如果你想要一个变体,你可以分叉并对其进行更改。