Browser Rendering

Cloudflare Browser Rendering gives you Puppeteer as a managed service. Take screenshots, generate PDFs, scrape JavaScript-rendered pages — all without managing browser instances or worrying about memory leaks.

Taking Screenshots

Capture screenshots of any website with just a few lines of Python:

async def on_fetch(request):
    browser = env.BROWSER

    # Screenshot any website
    page = await browser.new_page()
    await page.goto("https://news.ycombinator.com")
    screenshot = await page.screenshot()

    return Response.new(screenshot, headers={
        "Content-Type": "image/png"
    })

PDF Generation

Generate PDFs from any web page or HTML content:

async def on_fetch(request):
    browser = env.BROWSER
    page = await browser.new_page()

    # Render HTML content
    await page.set_content("""
        <html>
        <body>
            <h1>Invoice #12345</h1>
            <p>Amount: $99.00</p>
            <p>Date: 2024-01-15</p>
        </body>
        </html>
    """)

    pdf = await page.pdf(format="A4")

    return Response.new(pdf, headers={
        "Content-Type": "application/pdf",
        "Content-Disposition": "attachment; filename=invoice.pdf"
    })

Web Scraping

Scrape JavaScript-rendered pages that traditional HTTP libraries can't handle:

async def on_fetch(request):
    browser = env.BROWSER
    page = await browser.new_page()

    # Navigate and wait for JavaScript to render
    await page.goto("https://example.com/spa-app")
    await page.wait_for_selector(".content-loaded")

    # Extract data
    title = await page.evaluate("document.title")
    content = await page.evaluate(
        "document.querySelector('.main-content').innerText"
    )

    return Response.json({
        "title": title,
        "content": content
    })

Wrangler Configuration

# wrangler.toml
[browser]
binding = "BROWSER"

Migration Reference

You're Using Replace With Why Switch
Selenium / Playwright Browser Rendering No browser management, API-based
BeautifulSoup + requests Browser Rendering JavaScript rendering included
Puppeteer (self-hosted) Browser Rendering Managed browsers, no memory leaks