Enhanced error handling for headless browser automation. Provides detailed, actionable error messages for debugging Puppeteer issues.
npm install @browserless/errors> @browserless/errors: A collection of qualified errors for Puppeteer.
Using npm:
``sh`
npm install @browserless/errors --save
This package provides standardized, qualified error types for Puppeteer and browserless operations. It normalizes raw browser errors into consistent, typed errors with unique error codes for easier debugging and error handling.
The @browserless/errors package allows you to:
- Create typed errors with consistent structure and error codes
- Normalize raw errors from Puppeteer into qualified BrowserlessError instances
- Identify error types programmatically using error codes
- Debug errors with built-in serialization and logging
| Error Factory | Code | Description |
|---------------|------|-------------|
| browserTimeout | EBRWSRTIMEOUT | Promise or navigation timed out |protocolError
| | EPROTOCOL | Chrome DevTools Protocol error |evaluationFailed
| | EFAILEDEVAL | Page evaluation/script execution failed |contextDisconnected
| | EBRWSRCONTEXTCONNRESET | Browser context connection was reset |
`js
const errors = require('@browserless/errors')
// Create a timeout error
const timeoutError = errors.browserTimeout({ timeout: 30000 })
// => BrowserlessError: EBRWSRTIMEOUT, Promise timed out after 30000 milliseconds
// Create a protocol error
const protocolError = errors.protocolError({ message: 'Target closed.' })
// => BrowserlessError: EPROTOCOL, Target closed.
// Create an evaluation error
const evalError = errors.evaluationFailed({ message: 'foo is not defined' })
// => BrowserlessError: EFAILEDEVAL, foo is not defined
// Normalize a raw error from Puppeteer
const rawError = { message: 'Protocol error (Runtime.callFunctionOn): Target closed.' }
const normalizedError = errors.ensureError(rawError)
// => BrowserlessError: EPROTOCOL, Target closed.
// Check if an error is a BrowserlessError
if (errors.isBrowserlessError(error)) {
console.log('Error code:', error.code)
}
`
All BrowserlessError instances include:
| Property | Description |
|----------|-------------|
| name | Always 'BrowserlessError' |code
| | Unique error code (e.g., EBRWSRTIMEOUT) |message
| | Human-readable error message prefixed with the code |
This is a foundational utility package used throughout the browserless ecosystem:
| Consumer | Purpose |
|----------|---------|
| browserless (core) | Wraps operations with timeout errors, normalizes caught errors |@browserless/goto
| | Handles navigation and protocol errors |@browserless/screenshot
| | Handles screenshot capture errors |@browserless/pdf
| | Handles PDF generation errors |
| Package | Purpose |
|---------|---------|
| whoops | Error factory for creating typed errors with codes |ensure-error
| | Ensures values are proper Error instances |serialize-error
| | Serializes errors for debug logging |debug-logfmt` | Structured debug logging |
|
@browserless/errors © Microlink, released under the MIT License.
Authored and maintained by Microlink with help from contributors.
The logo has been designed by xinh studio.
> microlink.io · GitHub microlinkhq · X @microlinkhq