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: chrome-har-capturer [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
-a, --agent <agent> user agent override
-d, --delay <ms> time to wait after the load event
-g, --give-up <s> time to wait before giving up
-f, --force continue even without benchmarking extension
-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 chrome-har-capturer
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 chrome-har-capturer
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 (err) {
console.error('Cannot connect to Chrome: ' + err);
});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;userAgent: String used to override the user agent. Defaults to the original value;onLoadDelay: Milliseconds to wait after the load event is fired before stop capturing events. Defaults to0;giveUpTime; Seconds to wait before giving up with the current URL;force: Iftruecontinue even without the benchmarking extension support; useful to inspect Chrome for Android. Note that in this way the DNS cache and socket pool are not flushed. Defaults tofalse.
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.