Capture HAR files from a remote Chrome instance.
Under the hood this module uses chrome-remote-interface to instrument Chrome.
Start Chrome with options:
-
--remote-debugging-port=<port>to enable the Remote Debugging Protocol on the port<port>; -
--enable-benchmarking --enable-net-benchmarkingto enable the Javascript interface that allowschrome-har-capturerto flush the DNS cache and the socket pool before loading each URL.
For example:
google-chrome --remote-debugging-port=9222 \
--enable-benchmarking \
--enable-net-benchmarking
Usage: cli [options] URL...
Options:
-h, --help output usage information
-t, --host <host> Remote Debugging Protocol host
-p, --port <port> Remote Debugging Protocol port
-o, --output <file> dump to file instead of stdout
-c, --content also capture the requests body
-d, --delay <ms> time to wait after the load event
-v, --verbose enable verbose output on stderr
This module comes with a utility that can be used to generate a cumulative HAR file from a list of URLs.
Install globally with:
sudo npm install -g ./
Load a list of URL with:
chrome-har-capturer -o out.har \
https://github.com \
http://www.reddit.com \
http://iwillfail \
http://www.reddit.com/help/faq
Install locally with:
npm install ./
The following snippet loads an array of URLs serially and generate a cumulative HAR file, just like the Record button in the Network Panel of Chrome Developer Tools.
var fs = require('fs');
var chc = require('chrome-har-capturer');
var c = chc.load(['https://github.com',
'http://www.reddit.com',
'http://iwillfail',
'http://www.reddit.com/help/faq']);
c.on('connect', function () {
console.log('Connected to Chrome');
});
c.on('end', function (har) {
fs.writeFileSync('out.har', JSON.stringify(har));
});
c.on('error', function () {
console.error('Cannot connect to Chrome');
});Connects to a remote instance of Google Chrome using the
Remote Debugging Protocol and loads a list of URLs serially. Returns an
instance of the Client class.
urls is either an array or a single URL (note that URLs must contain the
schema, otherwise they will be rejected by Chrome).
options is an object with the following optional properties:
host: Remote Debugging Protocol host. Defaults tolocalhost;port: Remote Debugging Protocol port. Defaults to9222;chooseTab: Callback used to determine which remote tab attach to. Takes the JSON array returned byhttp://host:port/jsoncontaining the tab list and must return the numeric index of a tab. Defaults to a function that returns the active one (function (tabs) { return 0; });fetchContent: Iftruealso capture the requests body. Defaults tofalse;onLoadDelay: Milliseconds to wait after the load event is fired before stop capturing events. Defaults to0.
Enable or disable verbose prints for debugging purposes.
verbose: Verbosity flag. Defaults to true.
function () {}
Emitted when a connection to Chrome has been established.
function (url) {}
Emitted when Chrome is about to load url.
function (url) {}
Emitted when Chrome has finished loading url.
function (url) {}
Emitted when Chrome has failed loading url. Failed URLs will not appear in the
cumulative HAR object.
function (har) {}
Emitted when every given URL has been loaded. har is the cumulative HAR object.
function (err) {}
Emitted when http://host:port/json can't be reached or if there are unexpected
behaviors with Chrome. err in an instance of Error.
There are some known issues regarding the timings computed by this module, there are in general differences with the HAR files exported by Chrome itself via DevTools. See issue #19 for more details.