3-tier browser control — stealth scraping, CDP with persistent cookies, visual oversight. Navigate, screenshot, extract text, interact with logged-in pages.
Du hast drei Browser-Strategien plus WebFetch. Wähle die billigste passende Stufe und eskaliere nur wenn nötig.
| Task | Tool | Warum |
|---|---|---|
| Einzelne öffentliche Seite, nur Text | WebFetch oder curl | Am schnellsten, keine Browser-Engine |
| Öffentliche Seite mit JS / Cloudflare | Tier 1 Stealth | Headless + Fingerprint-Masking |
| Login-pflichtige Seite (LinkedIn, Gmail, …) | Tier 2 CDP | Echtes Chrome, persistente Cookies |
| Komplexer Multi-Step-Flow, User soll zusehen | Tier 3 Extension | Visuelle Kontrolle |
NIEMALS scripts/browse-server.cjs nutzen — existiert nicht mehr. nacktes für externe Seiten — wird sofort geblockt.
node -e "const {chromium}…"Für statische Seiten oder APIs, die keine JS-Rendering brauchen:
# Direkter curl
curl -sL -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
"https://www.michaelpage.de/jobs/it-director" | htmlq -t "h1, .job-title"
# Oder das WebFetch-Tool, wenn verfügbar (interpretiert Inhalt direkt)
Wenn das einen 403/Captcha gibt → eskaliere auf Tier 1.
Router-Script: ~/.claude/hub/SCRIPTS/browser.sh
# Seite laden, JSON-Metadata zurück (title, url, html_length)
~/.claude/hub/SCRIPTS/browser.sh stealth "https://www.stepstone.de/jobs/it-delivery"
# Mit Screenshot (PNG in ~/.claude/hub/BROWSER/screenshots/)
~/.claude/hub/SCRIPTS/browser.sh stealth "https://example.com" --screenshot=page.png
Was du bekommst: JSON mit {title, url, html_length, screenshot}. Der volle HTML liegt nicht in stdout — zum Parsen den stealth.js direkt als Modul importieren oder /tmp/-File lesen.
Wann blockt das: reCAPTCHA v3, aggressive Cloudflare, Login-Walls.
Konkrete funktionierende Targets (Stand 2026):
Echtes Chrome mit Profil unter ~/.claude/hub/BROWSER/profile/. Login-Cookies für LinkedIn/Gmail/etc. bleiben über Sessions erhalten.
# Einmal starten (checkt ob schon läuft)
~/.claude/hub/SCRIPTS/browser.sh cdp start headless # headless — für Cron/Daemon
~/.claude/hub/SCRIPTS/browser.sh cdp start headful # sichtbar — wenn User zusehen soll
# Navigieren
~/.claude/hub/SCRIPTS/browser.sh cdp goto "https://www.linkedin.com/jobs/search/?keywords=IT+Director"
# Screenshot
~/.claude/hub/SCRIPTS/browser.sh cdp shot "https://www.linkedin.com/feed/" linkedin_feed.png
# Tabs auflisten
~/.claude/hub/SCRIPTS/browser.sh cdp tabs
# Stoppen (meistens nicht nötig, Chrome läuft persistent)
~/.claude/hub/SCRIPTS/browser.sh cdp stop
Login-Setup (einmalig): Falls LinkedIn ausgeloggt ist, Ali per Telegram fragen:
"Bitte einmal in Chrome (Hub-Profil) bei LinkedIn einloggen. Cookies bleiben dann dauerhaft erhalten."
Starten mit cdp start headful und Chrome öffnet sichtbar → Ali loggt ein → ab dann bleiben Cookies im Profil.
Wie teste ich ob eingeloggt: nach cdp goto die URL prüfen — wenn /authwall oder /login im Pfad steht, bist du ausgeloggt.
Nur in interaktiven CLI-Sessions, nicht im Cron/Daemon.
# Check ob Extension verbunden
~/.claude/hub/SCRIPTS/browser.sh ext check
# Dann MCP-Tools über ToolSearch laden:
# mcp__claude-in-chrome__tabs_context_mcp
# mcp__claude-in-chrome__navigate
# mcp__claude-in-chrome__computer
Wann nutzen: Drag&Drop, komplexe UI, User soll live zusehen und eingreifen können.
Öffentliche Text-Seite → Tier 0 (WebFetch/curl)
↓ 403/Cloudflare/leerer HTML?
Tier 1 (stealth) → browser.sh stealth <url>
↓ Captcha/Login-Wall?
Tier 2 (CDP) → cdp start headless/headful + cdp goto <url>
↓ Cookies fehlen?
Ali fragen: "Bitte einmal in Chrome bei X einloggen, dann kann ich weitermachen."
NIEMALS aufgeben mit "Browser funktioniert nicht" — es gibt immer einen nächsten Schritt. Lieber ehrlich melden "Tier 1 blockt mit Captcha, versuche Tier 2" als "Failed to load".
# Übersicht aller Tiers + Health
~/.claude/hub/SCRIPTS/browser.sh status
# Ist CDP Chrome gerade auf Port 9222?
curl -s http://127.0.0.1:9222/json/version | head -c 200
Screenshots werden gespeichert unter ~/.claude/hub/BROWSER/screenshots/ (relativ) oder dem absoluten Pfad, den du angibst. Read-Tool auf den Pfad zeigt dir das Bild direkt an.
Für einfache Fälle: cdp eval mit JavaScript, das in der Seite ausgeführt wird:
~/.claude/hub/SCRIPTS/browser.sh cdp eval "https://example.com/login" \
"document.querySelector('#username').value='test'; document.querySelector('#password').value='pw'; document.querySelector('form').submit();"
Für komplexere Flows (sequentielles Klicken nach DOM-Updates) → Tier 3 (Extension) nutzen.
~/.claude/hub/BROWSER/profile/ nicht doppelt öffnen. Wenn Ali es lokal auf hatte, Port 9222 checken und cdp stop + cdp start machen.headless — sonst scheitert Chrome an fehlendem Display.cdp goto) neue Tabs legt Playwright standardmäßig an — reuseTab ist nicht exponiert. Das ist OK für einzelne Scrapes, kann aber zu Tab-Explosion führen. cdp stop & Neustart räumt auf.~/.claude/hub/BROWSER/profile/. Komplett persistiert zwischen Bot-Restarts.