Can a har file be programmatically generated from headless chrome using Puppeteer? Can a har file be programmatically generated from headless chrome using Puppeteer? google-chrome google-chrome

Can a har file be programmatically generated from headless chrome using Puppeteer?


There is no HAR generator helper in Puppeteer. But you can use chrome-har to generate HAR file.

const fs = require('fs');const { promisify } = require('util');const puppeteer = require('puppeteer');const { harFromMessages } = require('chrome-har');// list of events for converting to HARconst events = [];// event types to observeconst observe = [  'Page.loadEventFired',  'Page.domContentEventFired',  'Page.frameStartedLoading',  'Page.frameAttached',  'Network.requestWillBeSent',  'Network.requestServedFromCache',  'Network.dataReceived',  'Network.responseReceived',  'Network.resourceChangedPriority',  'Network.loadingFinished',  'Network.loadingFailed',];(async () => {  const browser = await puppeteer.launch();  const page = await browser.newPage();  // register events listeners  const client = await page.target().createCDPSession();  await client.send('Page.enable');  await client.send('Network.enable');  observe.forEach(method => {    client.on(method, params => {      events.push({ method, params });    });  });  // perform tests  await page.goto('https://en.wikipedia.org');  page.click('#n-help > a');  await page.waitForNavigation({ waitUntil: 'networkidle2' });  await browser.close();  // convert events to HAR file  const har = harFromMessages(events);  await promisify(fs.writeFile)('en.wikipedia.org.har', JSON.stringify(har));})();

Here you can find an article about this solution.


Solution proposed by @Everettss is the only option (so far), but is not as good as HAR saved in browser. Look at this, in both cases I generated HAR for google.com page. At top you have HAR generated by puppeteer-har (which is using chrome-har). Too little requests here, no metrics for main document, strangely different timing.

enter image description here

Puppeteer is not a perfect option for HAR files. Therefore I am suggesting to use https://github.com/cyrus-and/chrome-har-capturer