Skip to content

Instantly share code, notes, and snippets.

@weivall
Created May 1, 2020 18:16
Show Gist options
  • Save weivall/d2e697dcbfc363cd7ee1769efde0b04b to your computer and use it in GitHub Desktop.
Save weivall/d2e697dcbfc363cd7ee1769efde0b04b to your computer and use it in GitHub Desktop.

Revisions

  1. weivall created this gist May 1, 2020.
    48 changes: 48 additions & 0 deletions har.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    const fs = require('fs');
    const { promisify } = require('util');

    const puppeteer = require('puppeteer');
    const { harFromMessages } = require('chrome-har');

    // list of events for converting to HAR
    const events = [];

    // event types to observe
    const 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));
    })();