Babata Browser v3.0

Babata Browser v3.0 — Lightweight Playwright browser automation. Scan-first, act-second. Accessibility Tree preferred, zero extra AI dependencies. Use when: JS-rendered pages, gov sites, form filling, screenshot evidence, interactive web. NOT for: static pages (use web_fetch), API queries (use CLI), text search (use web_search).

Audits

Pass

Install

openclaw skills install babata-browser

Babata Browser 🦞 v3.0

Lightweight Playwright browser automation. Scan before acting, text before screenshots.


When to Use ✅

Gov policy sites (JS-rendered) / SPA data collection / Form filling / Screenshot evidence / web_fetch returns <500 chars / WeChat articles

When NOT to Use ❌

Static pages → web_fetch / API queries → fetch() / Text search → web_search (Tavily)


Install

pip install playwright && python -m playwright install chromium
cd skills/babata-browser && pip install -e .

Core Principles

1. Scan First (from smart-browser best practice)

Never snapshot blindly. Find interactive elements with JS first:

browser.execute_js(page, """
  (() => {
    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');
    return [...els]
      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })
      .map((el, i) => ({ i, tag: el.tagName.toLowerCase(), text: (el.innerText || el.value || '').trim().slice(0, 50), id: el.id, href: el.href?.slice(0, 80) }));
  })()
""")

2. Click by Text, Not CSS

browser.click(page, text='Latest Policy')  # ✅ Stable
# ❌ browser.click(page, selector='#content > div:nth-child(3) > a')

3. Smart Wait (Not Fixed Sleep)

browser.execute_js(page, """
  new Promise(resolve => { let tries = 0;
    const t = setInterval(() => {
      if (document.body.innerText.includes('expected text') || ++tries > 30) { clearInterval(t); resolve(tries < 30 ? 'found' : 'timeout'); }
    }, 500);
  })
""")

4. Layered Extraction

Accessibility Snapshot → find target region → get_text(selector=region)
  → still unclear? → screenshot (last resort)

Usage

Quick (Natural Language)

from scripts.babata_browser import execute_task
result = execute_task('Open https://example.com, search policy, extract top 5 titles')

Precise Control

from scripts.babata_browser import BabataBrowser
browser = BabataBrowser(headless=True); browser.start(); page = browser.new_page()
browser.goto(page, 'https://example.com')
browser.click(page, text='Agree')
browser.fill(page, 'input[name="q"]', 'query')
text = browser.get_text(page)
browser.screenshot(page, path='evidence.png')
browser.stop()  # ⚠️ Always close

CLI

babata-browser 'Open GitHub Trending, extract top projects' --json

Capabilities

ActionDescriptionUse Case
goto(url)NavigateOpen target page
get_text(sel?)Extract text (scoped optional)Page body
get_links(limit)All linksNavigation, search results
click(text=, sel=)Click by text or CSSPagination, submit, nav
fill(sel, val)Fill inputSearch box, login form
screenshot(path)Full-page screenshotEvidence, visual verify
scroll(n)ScrollLazy-loaded content
execute_js(code)Run JSElement scan, smart wait
extract_table(sel)Table to dict listData tables

Errors

ErrorFix
ERR_TIMED_OUTIncrease timeout: goto(page, url, timeout=60000)
CloudFlare "Just a moment..."Blocked — switch data source
Element not foundScan first, click by text not CSS
page.click: TimeoutUse smart wait, not fixed sleep
Orphaned browser processAlways call stop() in try/finally

Security

  • Never enter real credentials on untrusted sites
  • Check content before screenshot (avoid capturing sensitive data)
  • Default: headless=True
  • Mandatory: stop() after use

vs Playwright MCP

Playwright MCPbabata-browser v3.0
DependenciesNode + npx + ChromiumPython + Playwright + Chromium
AI decisionsMCP clientBabata LLM direct
Token efficiencyMCP protocol overheadCLI, zero protocol cost
Best forLong-running automationHigh-frequency interaction, sampling

Changelog

VersionDateChanges
v2.12026-05-11Smart scan JS, smart wait, layered extraction, error table, security rules
v3.02026-05-11Full English localization, streamlined structure, version bump