Skip to main content
All posts
Browser-Automation

Schluss mit Abbrüchen in Browser-Use & OpenClaw: Schnelle DOM- + Vision-Agenten auf bf16.ai

Warum Standard-LLMs bei Staging-Passwortfeldern und AGB-Checkboxen streiken — und wie du Browser-Use oder OpenClaw mit den abliterierten Text- und Vision-Modellen von bf16.ai kombinierst.

TL;DR · Browser-Automation im Überblick

  • Ursache für Abbrüche: Chat-optimierte LLMs werten <input type="password"> und AGB-Checkboxen in Staging-Tests fälschlich als Phishing oder unzulässige Rechtsgeschäfte.
  • Dual-Engine auf bf16.ai: deepseek/deepseek-v4.1-flash-abliterated ($0.30 / $0.05 / $1.20) für reine DOM-Loops und zai-org/glm-5.3-flash-abliterated (Vision + Text, $0.24 / $0.06 / $1.00) für visuelle Modals.
  • Ausgelegt für 25-stufige Staging-Suites: Bis zu vier gebündelte Aktionen pro Schritt (max_actions_per_step=4) reduzieren die Modell-Roundtrips, und die abliterierten Planer auf bf16.ai brechen den Lauf nicht mit einer Belehrung ab.

1. Warum Passwortfelder und AGB-Checkboxen CI-Pipelines zum Absturz bringen

Browser-Use und OpenClaw ersetzen fragile XPath-Selektoren durch Live-Auswertung des Accessibility-DOMs. Sobald ein Agent jedoch Test-Zugangsdaten einträgt und eine AGB-Checkbox anhakt, verweigern klassische Frontier-Modelle die strukturierte AgentOutput-Antwort und brechen den Lauf mit einer Belehrung ab:

[browser-use] Step 11/25 -> URL: https://staging.billing-app.internal/signup/verify
[browser-use] Extracted 42 interactive DOM elements:
  [18] <input type="email" name="work_email" />
  [19] <input type="password" name="password" />
  [24] <input type="checkbox" id="accept-tos-privacy" />
  [25] <button type="submit">Create Staging Account</button>
[llm:response] finish_reason="stop" (0 tool_calls emitted)
  "I cannot enter authentication credentials, create user accounts, or accept legally binding Terms of Service agreements on your behalf."
[browser-use] ValidationError: AgentOutput JSON missing required field 'action'. Suite failed (exit 1).

2. Hybride DOM- + Vision-Architektur auf bf16.ai

Zwei sich ergänzende abliterierte 1M-Kontext-Modelle decken auf bf16.ai beide Anforderungen ab:

  1. deepseek/deepseek-v4.1-flash-abliterated: Maximale Geschwindigkeit für textbasierte DOM-Bäume.
  2. zai-org/glm-5.3-flash-abliterated (Vision + Text): Kombiniert Viewport-Screenshots mit DOM-Indizes für $0.24/1M Input (günstiger als Z.ai Official FlashX mit $0.37/1M).

3. Browser-Use-Integration und Netzwerk-Isolierung in Playwright

Mit use_vision=True und max_actions_per_step=4 bündelt der Agent Formulareingabe, Checkbox und Submit in einem einzigen Modellaufruf:

import asyncio, os
from langchain_openai import ChatOpenAI
from browser_use import Agent, BrowserConfig, Browser

# Primary fast DOM planner ($0.30/$0.05/$1.20 per 1M)
dom_llm = ChatOpenAI(
    base_url="https://api.bf16.ai/v1",
    api_key=os.environ["BF16_API_KEY"],
    model="deepseek/deepseek-v4.1-flash-abliterated",
    temperature=0.1,
)

# Multimodal Vision + Text planner ($0.24/$0.06/$1.00 per 1M)
vision_llm = ChatOpenAI(
    base_url="https://api.bf16.ai/v1",
    api_key=os.environ["BF16_API_KEY"],
    model="zai-org/glm-5.3-flash-abliterated",
    temperature=0.1,
)

async def run_staging_onboarding_suite():
    browser = Browser(config=BrowserConfig(headless=True))
    agent = Agent(
        task=(
            "1. Open https://staging.billing-app.internal/signup. "
            "2. Fill test account credentials from QA fixture, check #accept-tos-privacy, and submit. "
            "3. Complete the 3-step workspace wizard and assert that '/dashboard/ready' renders."
        ),
        llm=vision_llm,      # Native Vision + DOM reasoning without refusal lectures
        use_vision=True,
        browser=browser,
        max_actions_per_step=4,
    )
    history = await agent.run(max_steps=25)
    assert history.is_done(), "Staging onboarding E2E did not reach terminal assertion"

if __name__ == "__main__":
    asyncio.run(run_staging_onboarding_suite())

Externe Domains blockierst du deterministisch über context.route() in Playwright; Prompts lassen sich vorab live im bf16.ai/playground testen:

// Deterministic Playwright/CDP network guardrail (enforce domain policy in code, not RLHF!)
const ALLOWED_HOSTS = new Set([
  'staging.billing-app.internal',
  'auth-sandbox.billing-app.internal',
  'localhost',
]);

await context.route('**/*', async (route) => {
  const url = new URL(route.request().url());
  if (!ALLOWED_HOSTS.has(url.hostname)) {
    return route.abort('blockedbyclient');
  }
  return route.continue();
});

Interaktive Workbench (bf16.ai/playground): Live-Test von Browser-Use-JSON-Presets unter Zero-Prompt-Retention (ZDR).

▲ Interaktive Workbench (bf16.ai/playground): Live-Test von Browser-Use-JSON-Presets unter Zero-Prompt-Retention (ZDR).

4. Latenz- und Kostenaufschlüsselung über 25 E2E-Schritte

Action-Batching (max_actions_per_step=4) und Streaming-Antworten auf bf16.ai senken die Zahl aufeinanderfolgender Modellaufrufe in einer 25-stufigen Signup- und Workspace-Suite; Laufzeit und Kosten pro Lauf misst du am besten an deiner eigenen Suite. Woran die einzelnen Strategien typischerweise scheitern:

Browser-SetupHäufigste Fehlerursache
Standard-Chat-API (nur DOM)Verweigert password & #accept-tos
Unverifiziertes lokales Q4Kaputtes AgentOutput-JSON
deepseek-v4.1-flash-abliteratedÜbersieht nur unbeschriftete Canvas-UI
glm-5.3-flash-abliterated (Vision)Meistert Auth-DOM und visuelle Overlays

5. 4 Produktionsregeln für zuverlässige Browser-Agenten

  1. Nur isolierte Staging-Konten nutzen und Ziel-Domains via context.route() hart eingrenzen.
  2. Formularschritte bündeln (max_actions_per_step = 4), um Latenz und Token-Kosten zu sparen.
  3. Echte Bezahl-Checkouts im Playwright-Code durch Human-Approval schützen.
  4. max_failures=3 mit täglichen USD-Key-Limits in bf16.ai/dashboard/keys kombinieren.