Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Comprehensive Cloudflare platform skill covering Workers, D1, R2, KV, AI, Durable Objects, and security.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/browser-rendering/api.md
1# Browser Rendering API23## REST API45**Base:** `https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering`6**Auth:** `Authorization: Bearer <token>` (Browser Rendering - Edit permission)78### Endpoints910| Endpoint | Description | Key Options |11|----------|-------------|-------------|12| `/content` | Get rendered HTML | `url`, `waitUntil` |13| `/screenshot` | Capture image | `screenshotOptions: {type, fullPage, clip}` |14| `/pdf` | Generate PDF | `pdfOptions: {format, landscape, margin}` |15| `/snapshot` | HTML + inlined resources | `url` |16| `/scrape` | Extract by selectors | `selectors: ["h1", ".price"]` |17| `/json` | AI-structured extraction | `schema: {name: "string", price: "number"}` |18| `/links` | Get all links | `url` |19| `/markdown` | Convert to markdown | `url` |2021```bash22curl -X POST '.../browser-rendering/screenshot' \23-H "Authorization: Bearer $TOKEN" \24-d '{"url":"https://example.com","screenshotOptions":{"fullPage":true}}'25```2627## Workers Binding2829```jsonc30// wrangler.jsonc31{ "browser": { "binding": "MYBROWSER" } }32```3334## Puppeteer3536```typescript37import puppeteer from "@cloudflare/puppeteer";3839const browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });40const page = await browser.newPage();41await page.goto('https://example.com', { waitUntil: 'networkidle0' });4243// Content44const html = await page.content();45const title = await page.title();4647// Screenshot/PDF48await page.screenshot({ fullPage: true, type: 'png' });49await page.pdf({ format: 'A4', printBackground: true });5051// Interaction52await page.click('#button');53await page.type('#input', 'text');54await page.evaluate(() => document.querySelector('h1')?.textContent);5556// Session management57const sessions = await puppeteer.sessions(env.MYBROWSER);58const limits = await puppeteer.limits(env.MYBROWSER);5960await browser.close();61```6263## Playwright6465```typescript66import { launch, connect } from "@cloudflare/playwright";6768const browser = await launch(env.MYBROWSER, { keep_alive: 600000 });69const page = await browser.newPage();7071await page.goto('https://example.com', { waitUntil: 'networkidle' });7273// Modern selectors74await page.locator('.button').click();75await page.getByText('Submit').click();76await page.getByTestId('search').fill('query');7778// Context for isolation79const context = await browser.newContext({80viewport: { width: 1920, height: 1080 },81userAgent: 'custom'82});8384await browser.close();85```8687## Session Management8889```typescript90// List sessions91await puppeteer.sessions(env.MYBROWSER);9293// Connect to existing94await puppeteer.connect(env.MYBROWSER, sessionId);9596// Check limits97await puppeteer.limits(env.MYBROWSER);98// { remaining: ms, total: ms, concurrent: n }99```100101## Key Options102103| Option | Values |104|--------|--------|105| `waitUntil` | `load`, `domcontentloaded`, `networkidle0`, `networkidle2` |106| `keep_alive` | Max 600000ms (10 min) |107| `screenshot.type` | `png`, `jpeg` |108| `pdf.format` | `A4`, `Letter`, `Legal` |109