cloudflare-browser

Controla Chrome sin interfaz gráfica a través del WebSocket CDP de Cloudflare Browser Rendering. Úsalo para capturas de pantalla, navegación de páginas, scraping y grabación de video cuando el navegador…

npx skills add https://github.com/cloudflare/moltworker --skill cloudflare-browser

Cloudflare Browser Rendering

Control headless browsers via Cloudflare's Browser Rendering service using CDP (Chrome DevTools Protocol) over WebSocket.

Prerequisites

  • CDP_SECRET environment variable set
  • Browser profile configured in openclaw.json with cdpUrl pointing to the worker endpoint:
    "browser": {
      "profiles": {
        "cloudflare": {
          "cdpUrl": "https://your-worker.workers.dev/cdp?secret=..."
        }
      }
    }
    

Quick Start

Screenshot

node /path/to/skills/cloudflare-browser/scripts/screenshot.js https://example.com output.png

Multi-page Video

node /path/to/skills/cloudflare-browser/scripts/video.js "https://site1.com,https://site2.com" output.mp4

CDP Connection Pattern

The worker creates a page target automatically on WebSocket connect. Listen for Target.targetCreated event to get the targetId:

const WebSocket = require('ws');
const CDP_SECRET = process.env.CDP_SECRET;
const WS_URL = `wss://your-worker.workers.dev/cdp?secret=${encodeURIComponent(CDP_SECRET)}`;

const ws = new WebSocket(WS_URL);
let targetId = null;

ws.on('message', (data) => {
  const msg = JSON.parse(data.toString());
  if (msg.method === 'Target.targetCreated' && msg.params?.targetInfo?.type === 'page') {
    targetId = msg.params.targetInfo.targetId;
  }
});

Key CDP Commands

CommandPurpose
Page.navigateNavigate to URL
Page.captureScreenshotCapture PNG/JPEG
Runtime.evaluateExecute JavaScript
Emulation.setDeviceMetricsOverrideSet viewport size

Common Patterns

Navigate and Screenshot

await send('Page.navigate', { url: 'https://example.com' });
await new Promise(r => setTimeout(r, 3000)); // Wait for render
const { data } = await send('Page.captureScreenshot', { format: 'png' });
fs.writeFileSync('out.png', Buffer.from(data, 'base64'));

Scroll Page

await send('Runtime.evaluate', { expression: 'window.scrollBy(0, 300)' });

Set Viewport

await send('Emulation.setDeviceMetricsOverride', {
  width: 1280,
  height: 720,
  deviceScaleFactor: 1,
  mobile: false
});

Creating Videos

  1. Capture frames as PNGs during navigation
  2. Use ffmpeg to stitch: ffmpeg -framerate 10 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p output.mp4

Troubleshooting

  • No target created: Race condition - wait for Target.targetCreated event with timeout
  • Commands timeout: Worker may have cold start delay; increase timeout to 30-60s
  • WebSocket hangs: Verify CDP_SECRET matches worker configuration

Más skills de cloudflare

workerd-api-review
cloudflare
Optimización de rendimiento, diseño y compatibilidad de API, vulnerabilidades de seguridad y cumplimiento de especificaciones estándar para la revisión de código de workerd. Cubre tcmalloc-aware…
official
workerd-safety-review
cloudflare
Seguridad de memoria, seguridad de hilos, concurrencia y patrones críticos de detección para la revisión de código de workerd. Cubre riesgos en el límite V8/KJ, gestión de ciclo de vida,…
official
module-registry
cloudflare
Cargar al trabajar con el registro de módulos en workerd — leer, modificar, depurar o revisar la resolución, compilación, evaluación o registro de módulos…
official
reproduce
cloudflare
Reproducir un problema de GitHub de cloudflare/agents creando un proyecto mínimo de Agents/Worker y desplegándolo en una cuenta temporal de Cloudflare, luego informar…
official
local-explorer
cloudflare
Cómo agregar productos/recursos al explorador local o a la API local. Úselo al implementar nuevas API locales o rutas de interfaz de usuario bajo…
official
commit-categories
cloudflare
Reglas de categorización de commits para registros de cambios y resúmenes de "novedades". DEBE cargarse antes de categorizar commits en comandos de registro de cambios o novedades. Proporciona…
official
architecture
cloudflare
Úsalo al navegar por el código base por primera vez, al agregar un nuevo método de cliente, al agregar un nuevo controlador/servicio de contenedor, o al entender cómo fluye una solicitud…
official
changesets
cloudflare
Úsalo al crear un changeset, preparar un lanzamiento o actualizar versiones. Cubre qué paquetes referenciar, cómo escribir descripciones de changeset orientadas al usuario,…
official