How to pass response object to external callback function in puppeteer?

Viewed 168

I was trying to modularize my puppeteer code and wanted to get the page.on event functionality to a different file. looks like I am not being able to send the response object to the external file. How can I do it?

main.js

const puppeteer = require('puppeteer');
const sniffer = require('./sniffer.js')

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://www.google.com/')

  page.on('response', sniffer(response) );
  
  /** currently working like this
  page.on('response', async (response) => { 
  /** sniffer code **/
  })
  **/

  await browser.close()
})()

sniffer.js

async function sniffResponse (response) {
    /** sniffer code **/
}

module.exports.sniffer = sniffResponse;
1 Answers
  1. page.on() (or more general eventEmitter.on()) needs a reference to a function as an event handler. When you add a call parentheses to a function, you replace a reference to a function with a result that function returns. So you just need page.on('response', sniffer);.

  2. The response argument is provided automatically to the handler. You can see this in the docs by the event signature. So you need not change anything in sniffer.js.

  3. It seems you also need to edit import line. Try:

const { sniffer } = require('./sniffer.js');

or:

const sniffer = require('./sniffer.js').sniffer;
Related