33800 Docs

← Retour

WS CDP Screencast + Canvas Interactions - ScrapperTool

Date: 05/02/2026 Status: PARTIELLEMENT TERMINE Projets: browser-connector, connectors-front

Objectif

Remplacer le refresh screenshot REST par un flux WebSocket temps reel via CDP (Chrome DevTools Protocol) Screencast. Ajouter des interactions directes sur le canvas (click, scroll, clavier).

Ce qui fonctionne

WS Screencast (TERMINE)

Click gauche direct (TERMINE)

Scroll molette (TERMINE)

Clavier (TERMINE)

Captures Screenshot/PDF/HTML (TERMINE)

Ce qui ne fonctionne PAS

Clic droit (NON RESOLU)

Bugs decouverts et fixes

Bug Cause Fix Commit
Qwik serialisation WS useSignal<WebSocket> pas serialisable Pattern receive-only dans useVisibleTask$ 0e06b4d
Unicode escapes Write tool ecrit \u2713 au lieu de Replace all escapes fa8f6ae
WS session Map lookup fail Elysia/Bun ws object = ref differente dans open/message/close Map key = token string 7d6a462
422 /api/fetch query.maxWidth: 800 (number) au lieu de '800' (string) String value dad0b04
WS message parse fail Elysia/Bun auto-parse JSON → plain object, Buffer.from(object) crash Type check: string/Buffer/object f56e63c
Captures 404 URLs relatives /files/captures/... Prefix https://browser.33800.nowhere84.com 2fb48f7

Commits

browser-connector

connectors-front

Architecture

Frontend (ScrapperTool.tsx)
    |
    | wss://browser.33800.nowhere84.com/ws/screencast?token=JWT
    |
Nginx (192.168.1.104) -- WebSocket Upgrade -->
    |
Browser-Connector (192.168.1.12:5404)
    |
    | CDP: Page.startScreencast (1920x1080, JPEG q80)
    |
Chromium (Playwright)
    |
    | frames JPEG base64 ~2-5 fps
    |
    --> ws.send({ type: 'frame', image: '...' })

Lecons apprises

  1. Elysia/Bun WS: l'objet ws n'est PAS la meme reference entre open, message, close → utiliser une string comme cle de Map
  2. Elysia/Bun WS: les messages JSON sont auto-parses en objets → Buffer.from(object) crash, tester le type avant
  3. Qwik: useSignal<WebSocket> ne fonctionne pas (pas serialisable). Pattern: WS dans useVisibleTask$ uniquement
  4. Qwik canvas: les evenements contextmenu et mousedown button=2 ne firient pas sur un canvas element. Cause inconnue (ni au niveau element, ni au niveau document). A investiguer.
  5. connectors-api: schema /api/fetch attend query: Record<string, string> - toutes les valeurs doivent etre des strings