Buglesstack is in open beta development. Get started

Hi, I'm Ivan 👋

For any questions or inquiries, you can write to me at ivan@buglesstack.com

Implementation Guide

Wrap your browser automation code in a try...catch/except block and send error data to Buglesstack:

Puppeteer (JavaScript)

import axios from 'axios';
import puppeteer from 'puppeteer';

const browser = await puppeteer.launch();
const page = await browser.newPage();

try {
	await page.goto('https://www.google.com/search?q=puppeteer');		
	await page.waitForSelector('[name="q"]');
    await page.close();
    await browser.close();
}
catch (error) {
	// Prepare buglesstack data
	const buglesstackData = {
		url: page.url(),
		screenshot: await page.screenshot({ encoding: 'base64' }),
		html: await page.content(),
		metadata: {},
		message: error.message,
		stack: error.stack
	};

	// Get your access token from https://app.buglesstack.com
	const ACCESS_TOKEN = 'HERE_YOUR_ACCESS_TOKEN';

	// Send error to buglesstack
	await axios.post('https://app.buglesstack.com/api/v1/crashes', buglesstackData, {
		headers: {
			Authorization: `Bearer ${ACCESS_TOKEN}`,
			'Content-Type': 'application/json'
		}
	});
		
	// Re-throw the error to propagate it
	throw error;
}

Playwright (Python)

from playwright.sync_api import sync_playwright
import requests
import traceback

ACCESS_TOKEN = 'HERE_YOUR_ACCESS_TOKEN'  # Get your access token from https://app.buglesstack.com

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    try:
        page.goto('https://www.google.com/search?q=playwright')
        page.wait_for_selector('[name="q"]')
        page.close()
        browser.close()
    except Exception as error:
        # Prepare buglesstack data
        buglesstack_data = {
            'url': page.url,
            'screenshot': page.screenshot(type='png', full_page=True),  # bytes
            'html': page.content(),
            'metadata': {},
            'message': str(error),
            'stack': traceback.format_exc()
        }
        # Convert screenshot to base64
        import base64
        buglesstack_data['screenshot'] = base64.b64encode(buglesstack_data['screenshot']).decode('utf-8')

        # Send error to buglesstack
        headers = {
            'Authorization': f'Bearer {ACCESS_TOKEN}',
            'Content-Type': 'application/json'
        }
        requests.post('https://app.buglesstack.com/api/v1/crashes', json=buglesstack_data, headers=headers)
        # Re-raise the error to propagate it
        raise error

How it works:

  1. Wrap your browser automation operations in a try...catch/except block
  2. When an error occurs, capture relevant data (URL, screenshot, HTML)
  3. Send the error data to Buglesstack's API
  4. Re-throw the error to maintain your application's error flow