cloudflare-browser

Contrôler Chrome sans tête via le WebSocket CDP de Cloudflare Browser Rendering. Utiliser pour les captures d'écran, la navigation de pages, le scraping et la capture vidéo lorsque le navigateur…

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

Plus de skills de cloudflare

workerd-api-review
cloudflare
Optimisation des performances, conception et compatibilité des API, vulnérabilités de sécurité et conformité aux spécifications des normes pour la revue de code workerd. Couvre la prise en compte de tcmalloc…
official
workerd-safety-review
cloudflare
Sécurité mémoire, sécurité des threads, concurrence et motifs de détection critiques pour la revue de code workerd. Couvre les risques liés à la frontière V8/KJ, la gestion de la durée de vie,…
official
module-registry
cloudflare
Charger lorsque vous travaillez avec le registre de modules dans workerd — lecture, modification, débogage ou révision de la résolution, compilation, évaluation ou enregistrement de modules…
official
reproduce
cloudflare
Reproduire un problème GitHub cloudflare/agents en créant un projet minimal Agents/Worker et en le déployant sur un compte Cloudflare temporaire, puis signaler…
official
local-explorer
cloudflare
Comment ajouter des produits/ressources à l'explorateur local ou à l'API locale. À utiliser lors de l'implémentation de nouvelles API locales ou de routes d'interface utilisateur sous…
official
commit-categories
cloudflare
Règles de catégorisation des commits pour les journaux de modifications et les résumés "nouveautés". DOIT être chargé avant de catégoriser les commits dans les commandes de journal de modifications ou de nouveautés. Fournit…
official
architecture
cloudflare
Utiliser lors de la première navigation dans la base de code, de l'ajout d'une nouvelle méthode client, de l'ajout d'un nouveau gestionnaire/service de conteneur, ou de la compréhension du flux d'une requête…
official
changesets
cloudflare
À utiliser lors de la création d'un changeset, de la préparation d'une version ou de l'incrémentation des versions. Couvre les packages à référencer, la manière de rédiger les descriptions de changeset destinées aux utilisateurs,…
official