Guides

Puppeteer Configuration

Last updated by
Harlan Wilton
in chore: lint markdown.

Unlighthouse uses puppeteer to run the lighthouse module.

Puppeteer configuration

You can configure puppeteer with the puppeteerOptions key, which will be passed to the puppeteer launch constructor.

See puppeteer-launch-options for more information.

For example, you could run without a headless browser. Although not recommended.

import { defineUnlighthouseConfig } from 'unlighthouse/config'

export default defineUnlighthouseConfig({
  puppeteerOptions: {
    headless: false,
  },
})

Hook into puppeteer navigation

There may be instances where you need to hook into how the puppeteer instance is handling your pages.

A hook is provided to do this.

let token

export default defineUnlighthouseConfig({
  hooks: {
    'puppeteer:before-goto': async (page) => {
      if (!token)
        token = await generateToken()

      // set authentication token when we load a new page
      await page.evaluateOnNewDocument((token) => {
        localStorage.clear()
        localStorage.setItem('token', token)
      }, token)
    },
  },
})

Delete an element

export default defineUnlighthouseConfig({
  hooks: {
    'puppeteer:before-goto': async (page) => {
      const deleteSelector = '.VPNav'
      page.waitForNavigation().then(async () => {
        await page.waitForTimeout(1000)
        await page.evaluate((sel) => {
          const elements = document.querySelectorAll(sel)
          for (let i = 0; i < elements.length; i++)
            elements[i].parentNode.removeChild(elements[i])
        }, deleteSelector)
      })
    },
  },
})
Did this page help you?