I needed higher resolution screenshots for an ML model to classify elements on a webpage, but the default Lighthouse screenshot was too compressed. So, I created a custom Lighthouse Gatherer using Puppeteer. This gatherer captures a full-page, high-resolution screenshot encoded as base64 and returns it along with the device pixel ratio. This was a fun little project, and the code is surprisingly concise. However, future Lighthouse versions may include higher-resolution screenshots, making this gatherer redundant.
In this project, I'm working on an accessibility tool to detect links styled as buttons, a common issue that can confuse users. My approach involves scraping websites to gather images of buttons and links, and then training a machine learning model to distinguish between them. This post focuses on the scraping process using Puppeteer. I encountered challenges like occluded elements and smooth scrolling, which I addressed by checking for occlusion and disabling smooth scrolling. The next step is training the ML image classifier.
Puppeteer go
A simple node library for Puppeeter
Puppeteer Go
I've created Puppeteer Go, a small JavaScript library to simplify the process of creating CLI utilities with Puppeteer. It handles the boilerplate of launching the browser, opening a tab, navigating to a URL, performing a specified action, and cleaning up. This post demonstrates its usage by taking multiple screenshots of elements on a page, inspired by Ire Aderinokun's work. Examples include capturing screenshots of h1
elements on my blog and feature blocks on caniuse.com.
Bookmarklet: Chrome DevTools trace page
A simple bookmarklet that will performance trace the current page and open in an hosted devtools instance
Puppeteer as a service
Being able to run a browser on a server is one of the most powerful things to hit the web.
Hosting Puppeteer in a Docker container
A simple docker container that can host an instance of puppeteer and a custom app.
domcurl: curl + JavaScript
A curl-like utitly that runs JavaScript