2.9 KiB
2.9 KiB
Browser Rendering API
REST API
Base: https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering
Auth: Authorization: Bearer <token> (Browser Rendering - Edit permission)
Endpoints
| Endpoint | Description | Key Options |
|---|---|---|
/content |
Get rendered HTML | url, waitUntil |
/screenshot |
Capture image | screenshotOptions: {type, fullPage, clip} |
/pdf |
Generate PDF | pdfOptions: {format, landscape, margin} |
/snapshot |
HTML + inlined resources | url |
/scrape |
Extract by selectors | selectors: ["h1", ".price"] |
/json |
AI-structured extraction | schema: {name: "string", price: "number"} |
/links |
Get all links | url |
/markdown |
Convert to markdown | url |
curl -X POST '.../browser-rendering/screenshot' \
-H "Authorization: Bearer $TOKEN" \
-d '{"url":"https://example.com","screenshotOptions":{"fullPage":true}}'
Workers Binding
// wrangler.jsonc
{ "browser": { "binding": "MYBROWSER" } }
Puppeteer
import puppeteer from "@cloudflare/puppeteer";
const browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
// Content
const html = await page.content();
const title = await page.title();
// Screenshot/PDF
await page.screenshot({ fullPage: true, type: 'png' });
await page.pdf({ format: 'A4', printBackground: true });
// Interaction
await page.click('#button');
await page.type('#input', 'text');
await page.evaluate(() => document.querySelector('h1')?.textContent);
// Session management
const sessions = await puppeteer.sessions(env.MYBROWSER);
const limits = await puppeteer.limits(env.MYBROWSER);
await browser.close();
Playwright
import { launch, connect } from "@cloudflare/playwright";
const browser = await launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle' });
// Modern selectors
await page.locator('.button').click();
await page.getByText('Submit').click();
await page.getByTestId('search').fill('query');
// Context for isolation
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
userAgent: 'custom'
});
await browser.close();
Session Management
// List sessions
await puppeteer.sessions(env.MYBROWSER);
// Connect to existing
await puppeteer.connect(env.MYBROWSER, sessionId);
// Check limits
await puppeteer.limits(env.MYBROWSER);
// { remaining: ms, total: ms, concurrent: n }
Key Options
| Option | Values |
|---|---|
waitUntil |
load, domcontentloaded, networkidle0, networkidle2 |
keep_alive |
Max 600000ms (10 min) |
screenshot.type |
png, jpeg |
pdf.format |
A4, Letter, Legal |