Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Capture HAR files from a remote Chrome instance
JavaScript
Branch: master

Add an option to delay the load event triggering

This will hopefully satisfy the feature request #10 and at least serve
as a baseline solution for PR #16 and #18.
latest commit 01e885f5e3
@cyrus-and authored

README.md

chrome-har-capturer

Capture HAR files from a remote Chrome instance.

Under the hood this module uses chrome-remote-interface to instrument Chrome.

Usage

Start Chrome with options:

  • --remote-debugging-port=<port> to enable the Remote Debugging Protocol on the port <port>;

  • --enable-benchmarking --enable-net-benchmarking to enable the Javascript interface that allows chrome-har-capturer to 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

Use the bundled utility

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 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

Write a custom application

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 () {
    console.error('Cannot connect to Chrome');
});

API

load(urls, [options])

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 to localhost;
  • port: Remote Debugging Protocol port. Defaults to 9222;
  • chooseTab: Callback used to determine which remote tab attach to. Takes the JSON array returned by http://host:port/json containing 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: If true also capture the requests body. Defaults to false;
  • onLoadDelay: Milliseconds to wait after the load event is fired before stop capturing events. Defaults to 0.

setVerbose([verbose])

Enable or disable verbose prints for debugging purposes.

verbose: Verbosity flag. Defaults to true.

Class: Client

Event: 'connect'

function () {}

Emitted when a connection to Chrome has been established.

Event: 'pageStart'

function (url) {}

Emitted when Chrome is about to load url.

Event: 'pageEnd'

function (url) {}

Emitted when Chrome has finished loading url.

Event: 'pageError'

function (url) {}

Emitted when Chrome has failed loading url. Failed URLs will not appear in the cumulative HAR object.

Event: 'end'

function (har) {}

Emitted when every given URL has been loaded. har is the cumulative HAR object.

Event: 'error'

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.

Issues

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.

Resources

Something went wrong with that request. Please try again.