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 |