{"id":"ce70da2f-75e4-4456-8487-b4442b1ffe29","entityType":"agent","slug":"clawhub-meta-evo-creator-babata-browser","name":"Babata Browser","canonicalUrl":"https://www.xpersona.co/agent/clawhub-meta-evo-creator-babata-browser","canonicalPath":"/agent/clawhub-meta-evo-creator-babata-browser","generatedAt":"2026-10-11T20:57:47.593Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":null},"description":"Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba... Skill: Babata Browser Owner: meta-evo-creator Summary: Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba... Tags: anti-detection:3.1.0, browser:3.1.0, browser-automation:2.0.0, chinese:2.0.0, latest:3.1.0, playwright:3.1.0, scraping:2.0.0 Version history: v3.1.0 | 2026-05-17T03:27:41.551Z | user v3.1.0: CloakBr","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s178d1h38evdy216hm4xzkw55s867x8s:babata-browser","sourceUrl":"https://clawhub.ai/meta-evo-creator/babata-browser","homepage":"https://clawhub.ai/meta-evo-creator/skills/babata-browser","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/meta-evo-creator/babata-browser","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/meta-evo-creator/skills/babata-browser","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":null},"stars":null,"forks":null,"downloads":1010,"packageName":null,"latestVersion":"3.1.0","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:21:37.968Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T18:21:38.034Z","lastCrawledAt":"2026-10-11T18:21:37.968Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T18:21:37.968Z","lastVerifiedAt":null,"highlights":[{"version":"3.1.0","createdAt":"2026-05-17T03:27:41.551Z","changelog":"v3.1.0: CloakBrowser C++ anti-detection backend. Dual backend auto/cloakbrowser/playwright. reCAPTCHA v3: 0.1→0.9. Cloudflare Turnstile: FAIL→PASS. 30/30 bot detection tests pass. Drop-in Playwright replacement.","fileCount":11,"zipByteSize":9759},{"version":"3.0.0","createdAt":"2026-05-11T13:55:45.657Z","changelog":"v3.0: Full English localization, streamlined structure","fileCount":10,"zipByteSize":7536},{"version":"2.1.1","createdAt":"2026-05-11T12:02:58.018Z","changelog":"fix: add version field, correct bins requirement","fileCount":10,"zipByteSize":8681},{"version":"2.1.0","createdAt":"2026-05-11T11:59:07.596Z","changelog":"v2.1: 智能扫描JS+条件等待+分层提取+错误处理+安全规则+When NOT to Use","fileCount":10,"zipByteSize":8680},{"version":"2.0.1","createdAt":"2026-05-11T11:56:09.397Z","changelog":"babata-browser v2.0.1 - Updated documentation: clearer usage instructions, \"When to Use/NOT to Use\" suggestions, error handling and safety rules. - Added and explained a new JS-based smart element scanning strategy for identifying interactive elements. - Improved examples for conditional waiting, layered extraction, and recommended interaction (prefer text selectors over CSS). - Included common error cases and troubleshooting steps. - Outlined security best practices and process cleanup (stop() usage).","fileCount":10,"zipByteSize":8680},{"version":"2.0.0","createdAt":"2026-05-08T23:51:50.596Z","changelog":"v2.0: Accessibility Tree优先策略, CLI/MCP双模式, pip install -e . 全局可导入, 修复cron隔离会话import失败问题","fileCount":10,"zipByteSize":7381}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s178d1h38evdy216hm4xzkw55s867x8s:babata-browser","setupComplexity":"medium","setupSteps":["Python environment detected. Create a strict virtual environment (`python -m venv .venv`) before installing dependencies to prevent system-level package conflicts.","Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:57:47.591Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-meta-evo-creator-babata-browser/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":null},"readme":"Skill: Babata Browser\n\nOwner: meta-evo-creator\n\nSummary: Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba...\n\nTags: anti-detection:3.1.0, browser:3.1.0, browser-automation:2.0.0, chinese:2.0.0, latest:3.1.0, playwright:3.1.0, scraping:2.0.0\n\nVersion history:\n\nv3.1.0 | 2026-05-17T03:27:41.551Z | user\n\nv3.1.0: CloakBrowser C++ anti-detection backend. Dual backend auto/cloakbrowser/playwright. reCAPTCHA v3: 0.1→0.9. Cloudflare Turnstile: FAIL→PASS. 30/30 bot detection tests pass. Drop-in Playwright replacement.\n\nv3.0.0 | 2026-05-11T13:55:45.657Z | user\n\nv3.0: Full English localization, streamlined structure\n\nv2.1.1 | 2026-05-11T12:02:58.018Z | user\n\nfix: add version field, correct bins requirement\n\nv2.1.0 | 2026-05-11T11:59:07.596Z | user\n\nv2.1: 智能扫描JS+条件等待+分层提取+错误处理+安全规则+When NOT to Use\n\nv2.0.1 | 2026-05-11T11:56:09.397Z | auto\n\nbabata-browser v2.0.1\n\n- Updated documentation: clearer usage instructions, \"When to Use/NOT to Use\" suggestions, error handling and safety rules.\n- Added and explained a new JS-based smart element scanning strategy for identifying interactive elements.\n- Improved examples for conditional waiting, layered extraction, and recommended interaction (prefer text selectors over CSS).\n- Included common error cases and troubleshooting steps.\n- Outlined security best practices and process cleanup (stop() usage).\n\nv2.0.0 | 2026-05-08T23:51:50.596Z | user\n\nv2.0: Accessibility Tree优先策略, CLI/MCP双模式, pip install -e . 全局可导入, 修复cron隔离会话import失败问题\n\nArchive index:\n\nArchive v3.1.0: 11 files, 9759 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (71b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (588b), scripts/__init__.py (139b), scripts/babata_browser.py (10748b), skill-card.md (2461b), SKILL.md (5529b), _meta.json (133b)\n\nFile v3.1.0:SKILL.md\n\n---\nname: babata-browser\nversion: 3.1.0\ndescription: |\n  Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallback.\n  Use when: JS-rendered pages, gov sites, form filling, screenshot evidence, interactive web.\n  NOT for: static pages (use web_fetch), API queries (use CLI), text search (use web_search).\nmetadata:\n  openclaw:\n    emoji: 🦞\n    requires:\n      bins: [python]\n      env: []\n---\n\n# Babata Browser 🦞 v3.1\n\n> Lightweight browser automation with **CloakBrowser anti-detection** (C++-level stealth Chromium). Playwright fallback.\n> reCAPTCHA v3: 0.9 | Cloudflare Turnstile: PASS | 30/30 bot tests\n\n---\n\n## Backend (v3.1)\n\n| Backend | reCAPTCHA v3 | Cloudflare | gov sites | Default |\n|:--------|:-----------:|:----------:|:---------:|:-------:|\n| **CloakBrowser** | 0.9 | ✅ PASS | ✅ Strong | ✅ auto |\n| Playwright | 0.1 | ❌ FAIL | ⚠️ Blocked | fallback |\n\n- `backend='auto'` (default) → CloakBrowser if available → Playwright fallback\n- `backend='cloakbrowser'` → force CloakBrowser, error if unavailable\n- `backend='playwright'` → force Playwright\n\n---\n\n## When to Use ✅\nGov policy sites (JS-rendered) / SPA data collection / Form filling / Screenshot evidence / web_fetch returns <500 chars / WeChat articles\n\n## When NOT to Use ❌\nStatic pages → `web_fetch` / API queries → `fetch()` / Text search → `web_search` (Tavily)\n\n---\n\n## Install\n\n```bash\n# CloakBrowser (recommended — anti-detection)\npip install cloakbrowser\ncd skills/babata-browser && pip install -e .\n\n# Playwright fallback (already installed)\npip install playwright && python -m playwright install chromium\n```\n\n---\n\n## Core Principles\n\n### 1. Scan First (from smart-browser best practice)\nNever snapshot blindly. Find interactive elements with JS first:\n\n```python\nbrowser.execute_js(page, \"\"\"\n  (() => {\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\n    return [...els]\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\n      .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) }));\n  })()\n\"\"\")\n```\n\n### 2. Click by Text, Not CSS\n```python\nbrowser.click(page, text='Latest Policy')  # ✅ Stable\n# ❌ browser.click(page, selector='#content > div:nth-child(3) > a')\n```\n\n### 3. Smart Wait (Not Fixed Sleep)\n```python\nbrowser.execute_js(page, \"\"\"\n  new Promise(resolve => { let tries = 0;\n    const t = setInterval(() => {\n      if (document.body.innerText.includes('expected text') || ++tries > 30) { clearInterval(t); resolve(tries < 30 ? 'found' : 'timeout'); }\n    }, 500);\n  })\n\"\"\")\n```\n\n### 4. Layered Extraction\n```\nAccessibility Snapshot → find target region → get_text(selector=region)\n  → still unclear? → screenshot (last resort)\n```\n\n---\n\n## Usage\n\n### Quick (Natural Language)\n```python\nfrom scripts.babata_browser import execute_task\nresult = execute_task('Open https://example.com, search policy, extract top 5 titles')\n```\n\n### Precise Control\n```python\nfrom scripts.babata_browser import BabataBrowser\nbrowser = BabataBrowser(headless=True); browser.start(); page = browser.new_page()\nbrowser.goto(page, 'https://example.com')\nbrowser.click(page, text='Agree')\nbrowser.fill(page, 'input[name=\"q\"]', 'query')\ntext = browser.get_text(page)\nbrowser.screenshot(page, path='evidence.png')\nbrowser.stop()  # ⚠️ Always close\n```\n\n### CLI\n```bash\nbabata-browser 'Open GitHub Trending, extract top projects' --json\n```\n\n---\n\n## Capabilities\n\n| Action | Description | Use Case |\n|------|------|---------|\n| `goto(url)` | Navigate | Open target page |\n| `get_text(sel?)` | Extract text (scoped optional) | Page body |\n| `get_links(limit)` | All links | Navigation, search results |\n| `click(text=, sel=)` | Click by text or CSS | Pagination, submit, nav |\n| `fill(sel, val)` | Fill input | Search box, login form |\n| `screenshot(path)` | Full-page screenshot | Evidence, visual verify |\n| `scroll(n)` | Scroll | Lazy-loaded content |\n| `execute_js(code)` | Run JS | Element scan, smart wait |\n| `extract_table(sel)` | Table to dict list | Data tables |\n\n---\n\n## Errors\n\n| Error | Fix |\n|:----|:-----|\n| `ERR_TIMED_OUT` | Increase timeout: `goto(page, url, timeout=60000)` |\n| CloudFlare \"Just a moment...\" | Blocked — switch data source |\n| `Element not found` | Scan first, click by text not CSS |\n| `page.click: Timeout` | Use smart wait, not fixed sleep |\n| Orphaned browser process | Always call `stop()` in try/finally |\n\n## Security\n- Never enter real credentials on untrusted sites\n- Check content before screenshot (avoid capturing sensitive data)\n- Default: `headless=True`\n- Mandatory: `stop()` after use\n\n---\n\n## vs Playwright MCP\n\n| | Playwright MCP | babata-browser v3.0 |\n|---|---|---|\n| Dependencies | Node + npx + Chromium | **Python + Playwright + Chromium** |\n| AI decisions | MCP client | **Babata LLM direct** |\n| Token efficiency | MCP protocol overhead | **CLI, zero protocol cost** |\n| Best for | Long-running automation | **High-frequency interaction, sampling** |\n\n---\n\n## Changelog\n\n| Version | Date | Changes |\n|:----|:----|------|\n| v2.1 | 2026-05-11 | Smart scan JS, smart wait, layered extraction, error table, security rules |\n| v3.0 | 2026-05-11 | Full English localization, streamlined structure, version bump |\n\nFile v3.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"3.1.0\",\n  \"publishedAt\": 1778988461551\n}\n\nFile v3.1.0:skill-card.md\n\n## Description:\n\nBabata Browser is a lightweight browser automation skill for JS-rendered pages, form filling, screenshot evidence, and interactive web tasks, with CloakBrowser anti-detection and Playwright fallback.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[meta-evo-creator](https://clawhub.ai/user/meta-evo-creator)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and automation agents use this skill to navigate dynamic websites, extract rendered content, fill forms, capture screenshots, scroll pages, and run scoped JavaScript when simpler fetch or search tools are insufficient.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Anti-detection browser automation can be misused or conflict with site policies.\n\nMitigation: Use only for authorized browsing workflows and do not use it to bypass site policies or access controls.\n\nRisk: The skill can execute arbitrary JavaScript in visited pages.\n\nMitigation: Review JavaScript before execution and restrict runs to trusted tasks and controlled environments.\n\nRisk: Browser sessions may expose credentials or sensitive screenshots.\n\nMitigation: Avoid real credentials on untrusted sites and check page content before capturing screenshots.\n\nRisk: The Playwright fallback launches Chromium with reduced sandboxing and dependencies are not pinned exactly.\n\nMitigation: Run in a restricted container or VM and pin audited dependency versions before deployment.\n\n## Reference(s):\n\n- [Babata Browser ClawHub Skill Page](https://clawhub.ai/meta-evo-creator/skills/babata-browser)\n- [Meta-Evo Publisher Profile](https://clawhub.ai/user/meta-evo-creator)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown and JSON-compatible task results with optional inline Python and shell examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce extracted page text, link lists, table rows, screenshot file paths, executed step summaries, or browser automation guidance.]\n\n## Skill Version(s):\n\n3.1.0 (source: frontmatter, pyproject.toml, server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v3.1.0:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"3.1.0\"\ndescription = \"巴巴塔浏览器控制工具 — CloakBrowser C++级反检测(30/30 bot test pass) + Playwright fallback 双后端轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n    \"cloakbrowser>=0.3\",\n]\n\n[project.optional-dependencies]\nplaywright-only = [\"playwright>=1.40\"]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v3.1.0:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v3.1.0:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\ncloakbrowser>=0.3\n\n[playwright-only]\nplaywright>=1.40\n\nFile v3.1.0:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v3.1.0:babata_browser.egg-info/top_level.txt\n\nscripts\n\nArchive v3.0.0: 10 files, 7536 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (17b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (431b), scripts/__init__.py (139b), scripts/babata_browser.py (9239b), SKILL.md (4829b), _meta.json (133b)\n\nFile v3.0.0:SKILL.md\n\n---\nname: babata-browser\nversion: 3.0.0\ndescription: |\n  Babata Browser v3.0 — Lightweight Playwright browser automation. Scan-first, act-second. Accessibility Tree preferred, zero extra AI dependencies.\n  Use when: JS-rendered pages, gov sites, form filling, screenshot evidence, interactive web.\n  NOT for: static pages (use web_fetch), API queries (use CLI), text search (use web_search).\nmetadata:\n  openclaw:\n    emoji: 🦞\n    requires:\n      bins: [python]\n      env: []\n---\n\n# Babata Browser 🦞 v3.0\n\n> Lightweight Playwright browser automation. Scan before acting, text before screenshots.\n\n---\n\n## When to Use ✅\nGov policy sites (JS-rendered) / SPA data collection / Form filling / Screenshot evidence / web_fetch returns <500 chars / WeChat articles\n\n## When NOT to Use ❌\nStatic pages → `web_fetch` / API queries → `fetch()` / Text search → `web_search` (Tavily)\n\n---\n\n## Install\n\n```bash\npip install playwright && python -m playwright install chromium\ncd skills/babata-browser && pip install -e .\n```\n\n---\n\n## Core Principles\n\n### 1. Scan First (from smart-browser best practice)\nNever snapshot blindly. Find interactive elements with JS first:\n\n```python\nbrowser.execute_js(page, \"\"\"\n  (() => {\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\n    return [...els]\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\n      .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) }));\n  })()\n\"\"\")\n```\n\n### 2. Click by Text, Not CSS\n```python\nbrowser.click(page, text='Latest Policy')  # ✅ Stable\n# ❌ browser.click(page, selector='#content > div:nth-child(3) > a')\n```\n\n### 3. Smart Wait (Not Fixed Sleep)\n```python\nbrowser.execute_js(page, \"\"\"\n  new Promise(resolve => { let tries = 0;\n    const t = setInterval(() => {\n      if (document.body.innerText.includes('expected text') || ++tries > 30) { clearInterval(t); resolve(tries < 30 ? 'found' : 'timeout'); }\n    }, 500);\n  })\n\"\"\")\n```\n\n### 4. Layered Extraction\n```\nAccessibility Snapshot → find target region → get_text(selector=region)\n  → still unclear? → screenshot (last resort)\n```\n\n---\n\n## Usage\n\n### Quick (Natural Language)\n```python\nfrom scripts.babata_browser import execute_task\nresult = execute_task('Open https://example.com, search policy, extract top 5 titles')\n```\n\n### Precise Control\n```python\nfrom scripts.babata_browser import BabataBrowser\nbrowser = BabataBrowser(headless=True); browser.start(); page = browser.new_page()\nbrowser.goto(page, 'https://example.com')\nbrowser.click(page, text='Agree')\nbrowser.fill(page, 'input[name=\"q\"]', 'query')\ntext = browser.get_text(page)\nbrowser.screenshot(page, path='evidence.png')\nbrowser.stop()  # ⚠️ Always close\n```\n\n### CLI\n```bash\nbabata-browser 'Open GitHub Trending, extract top projects' --json\n```\n\n---\n\n## Capabilities\n\n| Action | Description | Use Case |\n|------|------|---------|\n| `goto(url)` | Navigate | Open target page |\n| `get_text(sel?)` | Extract text (scoped optional) | Page body |\n| `get_links(limit)` | All links | Navigation, search results |\n| `click(text=, sel=)` | Click by text or CSS | Pagination, submit, nav |\n| `fill(sel, val)` | Fill input | Search box, login form |\n| `screenshot(path)` | Full-page screenshot | Evidence, visual verify |\n| `scroll(n)` | Scroll | Lazy-loaded content |\n| `execute_js(code)` | Run JS | Element scan, smart wait |\n| `extract_table(sel)` | Table to dict list | Data tables |\n\n---\n\n## Errors\n\n| Error | Fix |\n|:----|:-----|\n| `ERR_TIMED_OUT` | Increase timeout: `goto(page, url, timeout=60000)` |\n| CloudFlare \"Just a moment...\" | Blocked — switch data source |\n| `Element not found` | Scan first, click by text not CSS |\n| `page.click: Timeout` | Use smart wait, not fixed sleep |\n| Orphaned browser process | Always call `stop()` in try/finally |\n\n## Security\n- Never enter real credentials on untrusted sites\n- Check content before screenshot (avoid capturing sensitive data)\n- Default: `headless=True`\n- Mandatory: `stop()` after use\n\n---\n\n## vs Playwright MCP\n\n| | Playwright MCP | babata-browser v3.0 |\n|---|---|---|\n| Dependencies | Node + npx + Chromium | **Python + Playwright + Chromium** |\n| AI decisions | MCP client | **Babata LLM direct** |\n| Token efficiency | MCP protocol overhead | **CLI, zero protocol cost** |\n| Best for | Long-running automation | **High-frequency interaction, sampling** |\n\n---\n\n## Changelog\n\n| Version | Date | Changes |\n|:----|:----|------|\n| v2.1 | 2026-05-11 | Smart scan JS, smart wait, layered extraction, error table, security rules |\n| v3.0 | 2026-05-11 | Full English localization, streamlined structure, version bump |\n\nFile v3.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"3.0.0\",\n  \"publishedAt\": 1778507745657\n}\n\nFile v3.0.0:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"2.0.0\"\ndescription = \"巴巴塔浏览器控制工具 — 基于 Playwright 的轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v3.0.0:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v3.0.0:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\n\nFile v3.0.0:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v3.0.0:babata_browser.egg-info/top_level.txt\n\nscripts\n\nArchive v2.1.1: 10 files, 8681 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (17b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (431b), scripts/__init__.py (139b), scripts/babata_browser.py (9239b), SKILL.md (6737b), _meta.json (133b)\n\nFile v2.1.1:SKILL.md\n\n---\r\nname: babata-browser\r\ndescription: |\r\n  巴巴塔浏览器控制技能 v2.1 — 基于 Playwright 的轻量浏览器自动化，自然语言控制，Accessibility Tree优先，零额外AI依赖。\r\n  Use when: JS渲染页面抓取、政府网站动态政策采集、表单自动填报、截图取证、需要交互的网页。\r\n  NOT for: 静态页面内容（用web_fetch）、API查询（用CLI）、简单文本搜索（用web_search）。\r\nmetadata:\r\n  openclaw:\r\n    emoji: 🦞\r\n    requires:\r\n      bins: [python]\r\n      env: []\r\n    primaryEnv: ''\r\n---\r\n\r\n# Babata Browser 🦞 v2.1\r\n\r\n> Playwright驱动的轻量浏览器自动化。先扫描再操作，先文字再截图。\r\n\r\n---\r\n\r\n## When to Use ✅\r\n\r\n- 政府网站动态政策抓取（中纪委/卫健委/医保局 — 常需JS渲染）\r\n- JS渲染的SPA页面数据采集（GitHub Trending、ClawHub等）\r\n- 表单自动填报、按钮点击、搜索交互\r\n- 截图取证（视觉验证需要的场景）\r\n- web_fetch返回空白/乱码/<500字符的页面\r\n- 微信公众号文章（需JS渲染+登录态）\r\n\r\n## When NOT to Use ❌\r\n\r\n- 静态内容页面 → 用 `web_fetch`（更快更轻）\r\n- API/结构化数据查询 → 用 `gh CLI` 或直接 `fetch()`\r\n- 纯文本搜索 → 用 `web_search`（Tavily）\r\n- 批量数据下载 → 用脚本比浏览器快\r\n\r\n---\r\n\r\n## 安装\r\n\r\n```bash\r\npip install playwright\r\npython -m playwright install chromium\r\ncd skills/babata-browser && pip install -e .\r\n```\r\n\r\n---\r\n\r\n## 核心设计原则\r\n\r\n### 1. 先扫描再操作（来自 smart-browser 最佳实践）\r\n\r\n不要盲目snapshot整个页面。先用JS片段找到可交互元素：\r\n\r\n```python\r\n# 扫描页面可交互元素（只返回可见的按钮/链接/输入框）\r\nresult = browser.execute_js(page, \"\"\"\r\n  (() => {\r\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\r\n    return [...els]\r\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\r\n      .map((el, i) => ({\r\n        i, tag: el.tagName.toLowerCase(),\r\n        text: (el.innerText || el.value || el.placeholder || '').trim().slice(0, 50),\r\n        id: el.id, href: el.href?.slice(0, 80)\r\n      }));\r\n  })()\r\n\"\"\")\r\n```\r\n\r\n### 2. 按文字点击，不猜选择器\r\n\r\n```python\r\n# ✅ 用文字匹配点击（最稳定）\r\nbrowser.click(page, text='最新政策')\r\n\r\n# ❌ 不要硬编码CSS选择器\r\nbrowser.click(page, selector='#content > div:nth-child(3) > a')\r\n```\r\n\r\n### 3. 条件等待，不固定sleep\r\n\r\n```python\r\n# ✅ 等特定文字出现\r\nbrowser.execute_js(page, \"\"\"\r\n  new Promise(resolve => {\r\n    let tries = 0;\r\n    const timer = setInterval(() => {\r\n      if (document.body.innerText.includes('目标文字') || ++tries > 30) {\r\n        clearInterval(timer);\r\n        resolve(tries < 30 ? 'found' : 'timeout');\r\n      }\r\n    }, 500);\r\n  })\r\n\"\"\")\r\n```\r\n\r\n### 4. 分层提取：先区域再细节\r\n\r\n```\r\nAccessibility Snapshot → 找到目标区域\r\n  → get_text(selector=区域) → 提取文字\r\n  → 还是不清晰 → screenshot（最后手段）\r\n```\r\n\r\n---\r\n\r\n## 使用方式\r\n\r\n### Python API（推荐）\r\n\r\n```python\r\nfrom scripts.babata_browser import execute_task\r\n\r\n# 一句话控制\r\nresult = execute_task('打开 https://www.nhc.gov.cn，搜索 医疗政策，提取前5条标题')\r\n# result = {'task': '...', 'steps': ['OK: ...', 'Searched: 医疗政策'], 'data': '...'}\r\n```\r\n\r\n### 底层API（精确控制）\r\n\r\n```python\r\nfrom scripts.babata_browser import BabataBrowser\r\n\r\nbrowser = BabataBrowser(headless=True)\r\nbrowser.start()\r\npage = browser.new_page()\r\n\r\n# 导航\r\nbrowser.goto(page, 'https://example.com')\r\n# 等待条件满足\r\nbrowser.wait(page, 2000)\r\n# 获取可交互元素列表（用JS扫描）\r\nbrowser.get_links(page, limit=30)\r\n# 按文字点击\r\nbrowser.click(page, text='同意')\r\n# 填表单\r\nbrowser.fill(page, 'input[name=\"username\"]', 'value')\r\n# 提取正文\r\ntext = browser.get_text(page)\r\n# 截图（最后手段）\r\nbrowser.screenshot(page, path='evidence.png')\r\n\r\nbrowser.stop()  # ⚠️ 必须关闭，否则进程残留\r\n```\r\n\r\n### CLI模式\r\n\r\n```bash\r\nbabata-browser '打开 GitHub Trending，提取热门项目' --json\r\n```\r\n\r\n---\r\n\r\n## 内置能力\r\n\r\n| 动作 | 说明 | 典型场景 |\r\n|------|------|---------|\r\n| `goto(url)` | 导航到URL | 打开目标页面 |\r\n| `get_text(sel?)` | 提取文字（可选限定区域） | 提取页面正文 |\r\n| `get_links(limit)` | 提取所有链接 | 获取导航菜单、搜索结果 |\r\n| `click(text=, sel=)` | 点击（文字或CSS匹配） | 翻页、提交、导航 |\r\n| `fill(sel, val)` | 填写输入框 | 搜索框、登录表单 |\r\n| `screenshot(path)` | 全页截图 | 取证、视觉验证 |\r\n| `scroll(n)` | 滚动页面 | 懒加载内容 |\r\n| `execute_js(code)` | 执行JS | 扫描元素、条件等待 |\r\n| `extract_table(sel)` | 提取表格数据 | 数据表格 |\r\n\r\n---\r\n\r\n## 错误处理\r\n\r\n| 错误 | 原因 | 处理 |\r\n|:----|:-----|:-----|\r\n| `Page.goto: net::ERR_TIMED_OUT` | 网络超时 | 增加timeout: `goto(page, url, timeout=60000)` |\r\n| CloudFlare \"Just a moment...\" | 被CF拦截 | 该站点无法用浏览器绕过，改用其他数据源 |\r\n| `Element not found` | 元素不存在 | 先scan再用text匹配，不用CSS选择器 |\r\n| `page.click: Timeout` | JS未加载完 | 用条件等待替代固定sleep |\r\n| 浏览器进程残留 | 未调用stop() | 使用try/finally确保stop() |\r\n\r\n---\r\n\r\n## 安全规则\r\n\r\n- **不要在不可信网站上输入真实凭证** — 浏览器操作可能被JS窃取\r\n- **截图前检查页面内容** — 避免截图保存敏感信息\r\n- **headless=True（默认）** — 减少系统资源占用\r\n- **使用后必须stop()** — 防止浏览器进程残留\r\n\r\n---\r\n\r\n## 对比Playwright MCP\r\n\r\n| | Playwright MCP | babata-browser v2.1 |\r\n|---|---|---|\r\n| 依赖 | Node.js + npx + Chromium | **仅 Python + Playwright + Chromium** |\r\n| 安装 | npx自动 | pip install |\r\n| AI决策 | MCP客户端决定 | **巴巴塔LLM直接决策** |\r\n| Token效率 | MCP协议开销 | **CLI直接调用，零协议开销** |\r\n| 持久状态 | ✅ 支持 | 按需创建/销毁 |\r\n| 适用 | 长周期自动化 | **高频交互、采样取证** |\r\n\r\n---\r\n\r\n## 变更日志\r\n\r\n| 版本 | 日期 | 改动 |\r\n|:----:|:----:|------|\r\n| v2.1 | 2026-05-11 | 新增When NOT to Use、错误处理表、安全规则、智能扫描JS片段（来自smart-browser）、条件等待模式、分层提取策略。从GitHub成熟技能学习Did/Don't模式 |\r\n| v2.0 | 2026-05-07 | Accessibility Tree优先策略、CLI/MCP双模式。来源：Playwright MCP |\r\n| v1.0 | — | 初始版本 |\n\nFile v2.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"2.1.1\",\n  \"publishedAt\": 1778500978018\n}\n\nFile v2.1.1:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"2.0.0\"\ndescription = \"巴巴塔浏览器控制工具 — 基于 Playwright 的轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v2.1.1:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v2.1.1:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\n\nFile v2.1.1:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v2.1.1:babata_browser.egg-info/top_level.txt\n\nscripts\n\nArchive v2.1.0: 10 files, 8680 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (17b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (431b), scripts/__init__.py (139b), scripts/babata_browser.py (9239b), SKILL.md (6741b), _meta.json (133b)\n\nFile v2.1.0:SKILL.md\n\n---\r\nname: babata-browser\r\ndescription: |\r\n  巴巴塔浏览器控制技能 v2.1 — 基于 Playwright 的轻量浏览器自动化，自然语言控制，Accessibility Tree优先，零额外AI依赖。\r\n  Use when: JS渲染页面抓取、政府网站动态政策采集、表单自动填报、截图取证、需要交互的网页。\r\n  NOT for: 静态页面内容（用web_fetch）、API查询（用CLI）、简单文本搜索（用web_search）。\r\nmetadata:\r\n  openclaw:\r\n    emoji: 🦞\r\n    requires:\r\n      bins: [playwright]\r\n      env: []\r\n    primaryEnv: ''\r\n---\r\n\r\n# Babata Browser 🦞 v2.1\r\n\r\n> Playwright驱动的轻量浏览器自动化。先扫描再操作，先文字再截图。\r\n\r\n---\r\n\r\n## When to Use ✅\r\n\r\n- 政府网站动态政策抓取（中纪委/卫健委/医保局 — 常需JS渲染）\r\n- JS渲染的SPA页面数据采集（GitHub Trending、ClawHub等）\r\n- 表单自动填报、按钮点击、搜索交互\r\n- 截图取证（视觉验证需要的场景）\r\n- web_fetch返回空白/乱码/<500字符的页面\r\n- 微信公众号文章（需JS渲染+登录态）\r\n\r\n## When NOT to Use ❌\r\n\r\n- 静态内容页面 → 用 `web_fetch`（更快更轻）\r\n- API/结构化数据查询 → 用 `gh CLI` 或直接 `fetch()`\r\n- 纯文本搜索 → 用 `web_search`（Tavily）\r\n- 批量数据下载 → 用脚本比浏览器快\r\n\r\n---\r\n\r\n## 安装\r\n\r\n```bash\r\npip install playwright\r\npython -m playwright install chromium\r\ncd skills/babata-browser && pip install -e .\r\n```\r\n\r\n---\r\n\r\n## 核心设计原则\r\n\r\n### 1. 先扫描再操作（来自 smart-browser 最佳实践）\r\n\r\n不要盲目snapshot整个页面。先用JS片段找到可交互元素：\r\n\r\n```python\r\n# 扫描页面可交互元素（只返回可见的按钮/链接/输入框）\r\nresult = browser.execute_js(page, \"\"\"\r\n  (() => {\r\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\r\n    return [...els]\r\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\r\n      .map((el, i) => ({\r\n        i, tag: el.tagName.toLowerCase(),\r\n        text: (el.innerText || el.value || el.placeholder || '').trim().slice(0, 50),\r\n        id: el.id, href: el.href?.slice(0, 80)\r\n      }));\r\n  })()\r\n\"\"\")\r\n```\r\n\r\n### 2. 按文字点击，不猜选择器\r\n\r\n```python\r\n# ✅ 用文字匹配点击（最稳定）\r\nbrowser.click(page, text='最新政策')\r\n\r\n# ❌ 不要硬编码CSS选择器\r\nbrowser.click(page, selector='#content > div:nth-child(3) > a')\r\n```\r\n\r\n### 3. 条件等待，不固定sleep\r\n\r\n```python\r\n# ✅ 等特定文字出现\r\nbrowser.execute_js(page, \"\"\"\r\n  new Promise(resolve => {\r\n    let tries = 0;\r\n    const timer = setInterval(() => {\r\n      if (document.body.innerText.includes('目标文字') || ++tries > 30) {\r\n        clearInterval(timer);\r\n        resolve(tries < 30 ? 'found' : 'timeout');\r\n      }\r\n    }, 500);\r\n  })\r\n\"\"\")\r\n```\r\n\r\n### 4. 分层提取：先区域再细节\r\n\r\n```\r\nAccessibility Snapshot → 找到目标区域\r\n  → get_text(selector=区域) → 提取文字\r\n  → 还是不清晰 → screenshot（最后手段）\r\n```\r\n\r\n---\r\n\r\n## 使用方式\r\n\r\n### Python API（推荐）\r\n\r\n```python\r\nfrom scripts.babata_browser import execute_task\r\n\r\n# 一句话控制\r\nresult = execute_task('打开 https://www.nhc.gov.cn，搜索 医疗政策，提取前5条标题')\r\n# result = {'task': '...', 'steps': ['OK: ...', 'Searched: 医疗政策'], 'data': '...'}\r\n```\r\n\r\n### 底层API（精确控制）\r\n\r\n```python\r\nfrom scripts.babata_browser import BabataBrowser\r\n\r\nbrowser = BabataBrowser(headless=True)\r\nbrowser.start()\r\npage = browser.new_page()\r\n\r\n# 导航\r\nbrowser.goto(page, 'https://example.com')\r\n# 等待条件满足\r\nbrowser.wait(page, 2000)\r\n# 获取可交互元素列表（用JS扫描）\r\nbrowser.get_links(page, limit=30)\r\n# 按文字点击\r\nbrowser.click(page, text='同意')\r\n# 填表单\r\nbrowser.fill(page, 'input[name=\"username\"]', 'value')\r\n# 提取正文\r\ntext = browser.get_text(page)\r\n# 截图（最后手段）\r\nbrowser.screenshot(page, path='evidence.png')\r\n\r\nbrowser.stop()  # ⚠️ 必须关闭，否则进程残留\r\n```\r\n\r\n### CLI模式\r\n\r\n```bash\r\nbabata-browser '打开 GitHub Trending，提取热门项目' --json\r\n```\r\n\r\n---\r\n\r\n## 内置能力\r\n\r\n| 动作 | 说明 | 典型场景 |\r\n|------|------|---------|\r\n| `goto(url)` | 导航到URL | 打开目标页面 |\r\n| `get_text(sel?)` | 提取文字（可选限定区域） | 提取页面正文 |\r\n| `get_links(limit)` | 提取所有链接 | 获取导航菜单、搜索结果 |\r\n| `click(text=, sel=)` | 点击（文字或CSS匹配） | 翻页、提交、导航 |\r\n| `fill(sel, val)` | 填写输入框 | 搜索框、登录表单 |\r\n| `screenshot(path)` | 全页截图 | 取证、视觉验证 |\r\n| `scroll(n)` | 滚动页面 | 懒加载内容 |\r\n| `execute_js(code)` | 执行JS | 扫描元素、条件等待 |\r\n| `extract_table(sel)` | 提取表格数据 | 数据表格 |\r\n\r\n---\r\n\r\n## 错误处理\r\n\r\n| 错误 | 原因 | 处理 |\r\n|:----|:-----|:-----|\r\n| `Page.goto: net::ERR_TIMED_OUT` | 网络超时 | 增加timeout: `goto(page, url, timeout=60000)` |\r\n| CloudFlare \"Just a moment...\" | 被CF拦截 | 该站点无法用浏览器绕过，改用其他数据源 |\r\n| `Element not found` | 元素不存在 | 先scan再用text匹配，不用CSS选择器 |\r\n| `page.click: Timeout` | JS未加载完 | 用条件等待替代固定sleep |\r\n| 浏览器进程残留 | 未调用stop() | 使用try/finally确保stop() |\r\n\r\n---\r\n\r\n## 安全规则\r\n\r\n- **不要在不可信网站上输入真实凭证** — 浏览器操作可能被JS窃取\r\n- **截图前检查页面内容** — 避免截图保存敏感信息\r\n- **headless=True（默认）** — 减少系统资源占用\r\n- **使用后必须stop()** — 防止浏览器进程残留\r\n\r\n---\r\n\r\n## 对比Playwright MCP\r\n\r\n| | Playwright MCP | babata-browser v2.1 |\r\n|---|---|---|\r\n| 依赖 | Node.js + npx + Chromium | **仅 Python + Playwright + Chromium** |\r\n| 安装 | npx自动 | pip install |\r\n| AI决策 | MCP客户端决定 | **巴巴塔LLM直接决策** |\r\n| Token效率 | MCP协议开销 | **CLI直接调用，零协议开销** |\r\n| 持久状态 | ✅ 支持 | 按需创建/销毁 |\r\n| 适用 | 长周期自动化 | **高频交互、采样取证** |\r\n\r\n---\r\n\r\n## 变更日志\r\n\r\n| 版本 | 日期 | 改动 |\r\n|:----:|:----:|------|\r\n| v2.1 | 2026-05-11 | 新增When NOT to Use、错误处理表、安全规则、智能扫描JS片段（来自smart-browser）、条件等待模式、分层提取策略。从GitHub成熟技能学习Did/Don't模式 |\r\n| v2.0 | 2026-05-07 | Accessibility Tree优先策略、CLI/MCP双模式。来源：Playwright MCP |\r\n| v1.0 | — | 初始版本 |\n\nFile v2.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"2.1.0\",\n  \"publishedAt\": 1778500747596\n}\n\nFile v2.1.0:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"2.0.0\"\ndescription = \"巴巴塔浏览器控制工具 — 基于 Playwright 的轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v2.1.0:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v2.1.0:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\n\nFile v2.1.0:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v2.1.0:babata_browser.egg-info/top_level.txt\n\nscripts\n\nArchive v2.0.1: 10 files, 8680 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (17b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (431b), scripts/__init__.py (139b), scripts/babata_browser.py (9239b), SKILL.md (6741b), _meta.json (133b)\n\nFile v2.0.1:SKILL.md\n\n---\r\nname: babata-browser\r\ndescription: |\r\n  巴巴塔浏览器控制技能 v2.1 — 基于 Playwright 的轻量浏览器自动化，自然语言控制，Accessibility Tree优先，零额外AI依赖。\r\n  Use when: JS渲染页面抓取、政府网站动态政策采集、表单自动填报、截图取证、需要交互的网页。\r\n  NOT for: 静态页面内容（用web_fetch）、API查询（用CLI）、简单文本搜索（用web_search）。\r\nmetadata:\r\n  openclaw:\r\n    emoji: 🦞\r\n    requires:\r\n      bins: [playwright]\r\n      env: []\r\n    primaryEnv: ''\r\n---\r\n\r\n# Babata Browser 🦞 v2.1\r\n\r\n> Playwright驱动的轻量浏览器自动化。先扫描再操作，先文字再截图。\r\n\r\n---\r\n\r\n## When to Use ✅\r\n\r\n- 政府网站动态政策抓取（中纪委/卫健委/医保局 — 常需JS渲染）\r\n- JS渲染的SPA页面数据采集（GitHub Trending、ClawHub等）\r\n- 表单自动填报、按钮点击、搜索交互\r\n- 截图取证（视觉验证需要的场景）\r\n- web_fetch返回空白/乱码/<500字符的页面\r\n- 微信公众号文章（需JS渲染+登录态）\r\n\r\n## When NOT to Use ❌\r\n\r\n- 静态内容页面 → 用 `web_fetch`（更快更轻）\r\n- API/结构化数据查询 → 用 `gh CLI` 或直接 `fetch()`\r\n- 纯文本搜索 → 用 `web_search`（Tavily）\r\n- 批量数据下载 → 用脚本比浏览器快\r\n\r\n---\r\n\r\n## 安装\r\n\r\n```bash\r\npip install playwright\r\npython -m playwright install chromium\r\ncd skills/babata-browser && pip install -e .\r\n```\r\n\r\n---\r\n\r\n## 核心设计原则\r\n\r\n### 1. 先扫描再操作（来自 smart-browser 最佳实践）\r\n\r\n不要盲目snapshot整个页面。先用JS片段找到可交互元素：\r\n\r\n```python\r\n# 扫描页面可交互元素（只返回可见的按钮/链接/输入框）\r\nresult = browser.execute_js(page, \"\"\"\r\n  (() => {\r\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\r\n    return [...els]\r\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\r\n      .map((el, i) => ({\r\n        i, tag: el.tagName.toLowerCase(),\r\n        text: (el.innerText || el.value || el.placeholder || '').trim().slice(0, 50),\r\n        id: el.id, href: el.href?.slice(0, 80)\r\n      }));\r\n  })()\r\n\"\"\")\r\n```\r\n\r\n### 2. 按文字点击，不猜选择器\r\n\r\n```python\r\n# ✅ 用文字匹配点击（最稳定）\r\nbrowser.click(page, text='最新政策')\r\n\r\n# ❌ 不要硬编码CSS选择器\r\nbrowser.click(page, selector='#content > div:nth-child(3) > a')\r\n```\r\n\r\n### 3. 条件等待，不固定sleep\r\n\r\n```python\r\n# ✅ 等特定文字出现\r\nbrowser.execute_js(page, \"\"\"\r\n  new Promise(resolve => {\r\n    let tries = 0;\r\n    const timer = setInterval(() => {\r\n      if (document.body.innerText.includes('目标文字') || ++tries > 30) {\r\n        clearInterval(timer);\r\n        resolve(tries < 30 ? 'found' : 'timeout');\r\n      }\r\n    }, 500);\r\n  })\r\n\"\"\")\r\n```\r\n\r\n### 4. 分层提取：先区域再细节\r\n\r\n```\r\nAccessibility Snapshot → 找到目标区域\r\n  → get_text(selector=区域) → 提取文字\r\n  → 还是不清晰 → screenshot（最后手段）\r\n```\r\n\r\n---\r\n\r\n## 使用方式\r\n\r\n### Python API（推荐）\r\n\r\n```python\r\nfrom scripts.babata_browser import execute_task\r\n\r\n# 一句话控制\r\nresult = execute_task('打开 https://www.nhc.gov.cn，搜索 医疗政策，提取前5条标题')\r\n# result = {'task': '...', 'steps': ['OK: ...', 'Searched: 医疗政策'], 'data': '...'}\r\n```\r\n\r\n### 底层API（精确控制）\r\n\r\n```python\r\nfrom scripts.babata_browser import BabataBrowser\r\n\r\nbrowser = BabataBrowser(headless=True)\r\nbrowser.start()\r\npage = browser.new_page()\r\n\r\n# 导航\r\nbrowser.goto(page, 'https://example.com')\r\n# 等待条件满足\r\nbrowser.wait(page, 2000)\r\n# 获取可交互元素列表（用JS扫描）\r\nbrowser.get_links(page, limit=30)\r\n# 按文字点击\r\nbrowser.click(page, text='同意')\r\n# 填表单\r\nbrowser.fill(page, 'input[name=\"username\"]', 'value')\r\n# 提取正文\r\ntext = browser.get_text(page)\r\n# 截图（最后手段）\r\nbrowser.screenshot(page, path='evidence.png')\r\n\r\nbrowser.stop()  # ⚠️ 必须关闭，否则进程残留\r\n```\r\n\r\n### CLI模式\r\n\r\n```bash\r\nbabata-browser '打开 GitHub Trending，提取热门项目' --json\r\n```\r\n\r\n---\r\n\r\n## 内置能力\r\n\r\n| 动作 | 说明 | 典型场景 |\r\n|------|------|---------|\r\n| `goto(url)` | 导航到URL | 打开目标页面 |\r\n| `get_text(sel?)` | 提取文字（可选限定区域） | 提取页面正文 |\r\n| `get_links(limit)` | 提取所有链接 | 获取导航菜单、搜索结果 |\r\n| `click(text=, sel=)` | 点击（文字或CSS匹配） | 翻页、提交、导航 |\r\n| `fill(sel, val)` | 填写输入框 | 搜索框、登录表单 |\r\n| `screenshot(path)` | 全页截图 | 取证、视觉验证 |\r\n| `scroll(n)` | 滚动页面 | 懒加载内容 |\r\n| `execute_js(code)` | 执行JS | 扫描元素、条件等待 |\r\n| `extract_table(sel)` | 提取表格数据 | 数据表格 |\r\n\r\n---\r\n\r\n## 错误处理\r\n\r\n| 错误 | 原因 | 处理 |\r\n|:----|:-----|:-----|\r\n| `Page.goto: net::ERR_TIMED_OUT` | 网络超时 | 增加timeout: `goto(page, url, timeout=60000)` |\r\n| CloudFlare \"Just a moment...\" | 被CF拦截 | 该站点无法用浏览器绕过，改用其他数据源 |\r\n| `Element not found` | 元素不存在 | 先scan再用text匹配，不用CSS选择器 |\r\n| `page.click: Timeout` | JS未加载完 | 用条件等待替代固定sleep |\r\n| 浏览器进程残留 | 未调用stop() | 使用try/finally确保stop() |\r\n\r\n---\r\n\r\n## 安全规则\r\n\r\n- **不要在不可信网站上输入真实凭证** — 浏览器操作可能被JS窃取\r\n- **截图前检查页面内容** — 避免截图保存敏感信息\r\n- **headless=True（默认）** — 减少系统资源占用\r\n- **使用后必须stop()** — 防止浏览器进程残留\r\n\r\n---\r\n\r\n## 对比Playwright MCP\r\n\r\n| | Playwright MCP | babata-browser v2.1 |\r\n|---|---|---|\r\n| 依赖 | Node.js + npx + Chromium | **仅 Python + Playwright + Chromium** |\r\n| 安装 | npx自动 | pip install |\r\n| AI决策 | MCP客户端决定 | **巴巴塔LLM直接决策** |\r\n| Token效率 | MCP协议开销 | **CLI直接调用，零协议开销** |\r\n| 持久状态 | ✅ 支持 | 按需创建/销毁 |\r\n| 适用 | 长周期自动化 | **高频交互、采样取证** |\r\n\r\n---\r\n\r\n## 变更日志\r\n\r\n| 版本 | 日期 | 改动 |\r\n|:----:|:----:|------|\r\n| v2.1 | 2026-05-11 | 新增When NOT to Use、错误处理表、安全规则、智能扫描JS片段（来自smart-browser）、条件等待模式、分层提取策略。从GitHub成熟技能学习Did/Don't模式 |\r\n| v2.0 | 2026-05-07 | Accessibility Tree优先策略、CLI/MCP双模式。来源：Playwright MCP |\r\n| v1.0 | — | 初始版本 |\n\nFile v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1778500569397\n}\n\nFile v2.0.1:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"2.0.0\"\ndescription = \"巴巴塔浏览器控制工具 — 基于 Playwright 的轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v2.0.1:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v2.0.1:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\n\nFile v2.0.1:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v2.0.1:babata_browser.egg-info/top_level.txt\n\nscripts\n\nArchive v2.0.0: 10 files, 7381 bytes\n\nFiles: babata_browser.egg-info/dependency_links.txt (1b), babata_browser.egg-info/entry_points.txt (67b), babata_browser.egg-info/requires.txt (17b), babata_browser.egg-info/SOURCES.txt (298b), babata_browser.egg-info/top_level.txt (8b), pyproject.toml (431b), scripts/__init__.py (139b), scripts/babata_browser.py (9352b), SKILL.md (4193b), _meta.json (133b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: babata-browser\ndescription: 巴巴塔浏览器控制技能 v2.0 — 基于 Playwright 的轻量浏览器自动化，自然语言控制，Accessibility Tree优先，零额外AI依赖\n---\n\n# Babata Browser 🦞 v2.0\n\n> 轻量浏览器自动化技能。给巴巴塔装一双\"网页上的手\"——打开网页、填写表单、点击按钮、提取数据、截图保存。\n\n## 架构概览\n\n```\n信息获取优先级：\n  验证/事实查询 → API/CLI（最快，不走浏览器）\n  探索/开放搜索 → web_search（Tavily，多角度）\n  JS渲染/交互/截图 → babata-browser（兜底）\n\n浏览器操作策略（v2.0 升级）：\n  获取结构 + 可交互元素 → Accessibility Snapshot（首选，Token高效）\n  提取页面文字 → get_text（结构化）\n  获取页面视觉状态 → screenshot（兜底）\n```\n\n## 对比 browser-use\n\n| | browser-use | babata-browser v2.0 |\n|---|---|---|\n| 依赖 | 50+包 | **仅 Playwright** |\n| 安装 | 300MB+/20min | 100MB/2min |\n| 控浏览器 | ✅ | ✅ |\n| AI决策 | 内置LLM | **巴巴塔LLM直接决策** |\n| 页面交互策略 | 视觉模型驱动 | **Accessibility Tree优先** |\n| Token效率 | 低（截图+视觉AI） | **高（结构化数据）** |\n| 中文任务 | 一般 | ✅ 原生中文 |\n\n## 核心设计原则\n\n### 1. Accessibility Tree 优先\n源自 Playwright MCP 设计模式。优先使用Playwright的Accessibility Tree快照获取页面结构和可交互元素，而不是视觉模型/截图。Token效率更高，且不需要额外AI视觉能力。\n\n| 场景 | 首选方式 | 兜底 |\n|------|---------|------|\n| 获取页面结构和可交互元素 | Accessibility Snapshot | — |\n| 提取页面文字 | `get_text` / `get_html` | — |\n| 获取页面视觉状态 | — | `screenshot` |\n\n### 2. CLI 轻量 > MCP 深度\n微软Playwright团队已验证：CLI模式Token效率高于MCP。巴巴塔遵循同样原则：\n\n- **高频操作**（导航/点击/提取）→ 直接Playwright CLI API（轻量快速）\n- **长周期/多步骤/需持久化状态** → MCP协议（富状态编排）\n\n### 3. 巴巴塔LLM直接决策\n不内嵌LLM，所有操作决策由巴巴塔的DeepSeek模型完成。优势：\n- 统一上下文（不用切AI）\n- 统一记忆（操作历史可追踪）\n- 统一安全（Guardrails覆盖所有操作路径）\n\n## 安装\n\n### 前置依赖\n```bash\npip install playwright\npython -m playwright install chromium\n```\n\n### 安装本包（全局可导入）\n```bash\n# 从 babata-browser 目录执行\ncd skills/babata-browser\npip install -e .\n```\n\n安装后可从**任意目录** import，包括 cron 隔离会话。\n\n## 使用\n\n```python\nfrom scripts.babata_browser import execute_task\n\n# 一句话操控浏览器\nexecute_task(\"打开卫健委官网，搜索最新政策，提取前5条标题\")\nexecute_task(\"打开 https://example.com，搜索 医疗AI，提取结果\")\nexecute_task(\"打开登录页，填表提交，截图保存\")\n```\n\n### CLI 模式\n```bash\nbabata-browser '打开 GitHub Trending，提取热门项目' --json\n```\n\n## 内置能力\n\n| 动作 | 说明 | 策略 |\n|------|------|------|\n| `goto` | 导航到URL | CLI |\n| `get_text` | 提取页面文字（Accessibility Tree优先） | CLI |\n| `get_html` | 获取HTML | CLI |\n| `click` | 点击元素(文本/CSS) | CLI |\n| `fill` | 填写表单 | CLI |\n| `get_links` | 提取所有链接 | CLI |\n| `screenshot` | 全页截图（Accessibility Tree不可用时兜底） | CLI |\n| `scroll` | 滚动页面 | CLI |\n| `execute_js` | 执行JavaScript | CLI |\n| `extract_table` | 智能提取表格 | CLI |\n| `search_and_extract` | 搜索+提取 | CLI |\n| `login_if_needed` | 自动登录 | CLI/MCP双模式 |\n| `accessibility_snapshot` | 获取Accessibility Tree快照（v2.0新增） | CLI |\n\n## 应用场景\n\n- 卫健委/医保局/中纪委官网动态政策抓取\n- 政府监管系统自动填报\n- JS渲染页面数据采集\n- 网页内容变化监控\n- 自动化表单提交\n\n## 变更日志\n\n| 版本 | 日期 | 改动 |\n|------|------|------|\n| v2.0 | 2026-05-07 | 新增Accessibility Tree优先策略、CLI/MCP双模式选择、策略表。来源：Playwright MCP设计模式 |\n| v1.0 | — | 初始版本 |\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1778284310596\n}\n\nFile v2.0.0:pyproject.toml\n\n[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"2.0.0\"\ndescription = \"巴巴塔浏览器控制工具 — 基于 Playwright 的轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]\n\nFile v2.0.0:babata_browser.egg-info/entry_points.txt\n\n[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli\n\nFile v2.0.0:babata_browser.egg-info/requires.txt\n\nplaywright>=1.40\n\nFile v2.0.0:babata_browser.egg-info/SOURCES.txt\n\nLICENSE\npyproject.toml\nbabata_browser.egg-info/PKG-INFO\nbabata_browser.egg-info/SOURCES.txt\nbabata_browser.egg-info/dependency_links.txt\nbabata_browser.egg-info/entry_points.txt\nbabata_browser.egg-info/requires.txt\nbabata_browser.egg-info/top_level.txt\nscripts/__init__.py\nscripts/babata_browser.py\n\nFile v2.0.0:babata_browser.egg-info/top_level.txt\n\nscripts","readmeExcerpt":"Skill: Babata Browser Owner: meta-evo-creator Summary: Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba... Tags: anti-detection:3.1.0, browser:3.1.0, browser-automation:2.0.0, chinese:2.0.0, latest:3.1.0, playwright:3.1.0, scraping:2.0.0 Version history: v3.1.0 | 2026-05-17T03:27:41.551Z | user v3.1.0: CloakBr","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# CloakBrowser (recommended — anti-detection)\npip install cloakbrowser\ncd skills/babata-browser && pip install -e .\n\n# Playwright fallback (already installed)\npip install playwright && python -m playwright install chromium"},{"language":"python","snippet":"browser.execute_js(page, \"\"\"\n  (() => {\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\n    return [...els]\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\n      .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) }));\n  })()\n\"\"\")"},{"language":"python","snippet":"browser.click(page, text='Latest Policy')  # ✅ Stable\n# ❌ browser.click(page, selector='#content > div:nth-child(3) > a')"},{"language":"python","snippet":"browser.execute_js(page, \"\"\"\n  new Promise(resolve => { let tries = 0;\n    const t = setInterval(() => {\n      if (document.body.innerText.includes('expected text') || ++tries > 30) { clearInterval(t); resolve(tries < 30 ? 'found' : 'timeout'); }\n    }, 500);\n  })\n\"\"\")"},{"language":"text","snippet":"Accessibility Snapshot → find target region → get_text(selector=region)\n  → still unclear? → screenshot (last resort)"},{"language":"python","snippet":"from scripts.babata_browser import execute_task\nresult = execute_task('Open https://example.com, search policy, extract top 5 titles')"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: babata-browser\nversion: 3.1.0\ndescription: |\n  Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallback.\n  Use when: JS-rendered pages, gov sites, form filling, screenshot evidence, interactive web.\n  NOT for: static pages (use web_fetch), API queries (use CLI), text search (use web_search).\nmetadata:\n  openclaw:\n    emoji: 🦞\n    requires:\n      bins: [python]\n      env: []\n---\n\n# Babata Browser 🦞 v3.1\n\n> Lightweight browser automation with **CloakBrowser anti-detection** (C++-level stealth Chromium). Playwright fallback.\n> reCAPTCHA v3: 0.9 | Cloudflare Turnstile: PASS | 30/30 bot tests\n\n---\n\n## Backend (v3.1)\n\n| Backend | reCAPTCHA v3 | Cloudflare | gov sites | Default |\n|:--------|:-----------:|:----------:|:---------:|:-------:|\n| **CloakBrowser** | 0.9 | ✅ PASS | ✅ Strong | ✅ auto |\n| Playwright | 0.1 | ❌ FAIL | ⚠️ Blocked | fallback |\n\n- `backend='auto'` (default) → CloakBrowser if available → Playwright fallback\n- `backend='cloakbrowser'` → force CloakBrowser, error if unavailable\n- `backend='playwright'` → force Playwright\n\n---\n\n## When to Use ✅\nGov policy sites (JS-rendered) / SPA data collection / Form filling / Screenshot evidence / web_fetch returns <500 chars / WeChat articles\n\n## When NOT to Use ❌\nStatic pages → `web_fetch` / API queries → `fetch()` / Text search → `web_search` (Tavily)\n\n---\n\n## Install\n\n```bash\n# CloakBrowser (recommended — anti-detection)\npip install cloakbrowser\ncd skills/babata-browser && pip install -e .\n\n# Playwright fallback (already installed)\npip install playwright && python -m playwright install chromium\n```\n\n---\n\n## Core Principles\n\n### 1. Scan First (from smart-browser best practice)\nNever snapshot blindly. Find interactive elements with JS first:\n\n```python\nbrowser.execute_js(page, \"\"\"\n  (() => {\n    const els = document.querySelectorAll('a[href], button, input, select, textarea, [role=button], [onclick]');\n    return [...els]\n      .filter(el => { const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.top < window.innerHeight; })\n      .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) }));\n  })()\n\"\"\")\n```\n\n### 2. Click by Text, Not CSS\n```python\nbrowser.click(page, text='Latest Policy')  # ✅ Stable\n# ❌ browser.click(page, selector='#content > div:nth-child(3) > a')\n```\n\n### 3. Smart Wait (Not Fixed Sleep)\n```python\nbrowser.execute_js(page, \"\"\"\n  new Promise(resolve => { let tries = 0;\n    const t = setInterval(() => {\n      if (document.body.innerText.includes('expected text') || ++tries > 30) { clearInterval(t); resolve(tries < 30 ? 'found' : 'timeout'); }\n    }, 500);\n  })\n\"\"\")\n```\n\n### 4. Layered Extraction\n```\nAccessibility Snapshot → find target region → get_text(selector=region)\n  → still unclear? → screenshot (last resort)\n```\n\n---\n\n## Usage\n\n### Quick (Natura"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cy2z5e60pxd0830tar97xwx866ydt\",\n  \"slug\": \"babata-browser\",\n  \"version\": \"3.1.0\",\n  \"publishedAt\": 1778988461551\n}"},{"path":"skill-card.md","content":"## Description:\n\nBabata Browser is a lightweight browser automation skill for JS-rendered pages, form filling, screenshot evidence, and interactive web tasks, with CloakBrowser anti-detection and Playwright fallback.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[meta-evo-creator](https://clawhub.ai/user/meta-evo-creator)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and automation agents use this skill to navigate dynamic websites, extract rendered content, fill forms, capture screenshots, scroll pages, and run scoped JavaScript when simpler fetch or search tools are insufficient.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Anti-detection browser automation can be misused or conflict with site policies.\n\nMitigation: Use only for authorized browsing workflows and do not use it to bypass site policies or access controls.\n\nRisk: The skill can execute arbitrary JavaScript in visited pages.\n\nMitigation: Review JavaScript before execution and restrict runs to trusted tasks and controlled environments.\n\nRisk: Browser sessions may expose credentials or sensitive screenshots.\n\nMitigation: Avoid real credentials on untrusted sites and check page content before capturing screenshots.\n\nRisk: The Playwright fallback launches Chromium with reduced sandboxing and dependencies are not pinned exactly.\n\nMitigation: Run in a restricted container or VM and pin audited dependency versions before deployment.\n\n## Reference(s):\n\n- [Babata Browser ClawHub Skill Page](https://clawhub.ai/meta-evo-creator/skills/babata-browser)\n- [Meta-Evo Publisher Profile](https://clawhub.ai/user/meta-evo-creator)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown and JSON-compatible task results with optional inline Python and shell examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce extracted page text, link lists, table rows, screenshot file paths, executed step summaries, or browser automation guidance.]\n\n## Skill Version(s):\n\n3.1.0 (source: frontmatter, pyproject.toml, server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"pyproject.toml","content":"[build-system]\nrequires = [\"setuptools>=64\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"babata-browser\"\nversion = \"3.1.0\"\ndescription = \"巴巴塔浏览器控制工具 — CloakBrowser C++级反检测(30/30 bot test pass) + Playwright fallback 双后端轻量浏览器自动化\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"playwright>=1.40\",\n    \"cloakbrowser>=0.3\",\n]\n\n[project.optional-dependencies]\nplaywright-only = [\"playwright>=1.40\"]\n\n[project.scripts]\nbabata-browser = \"scripts.babata_browser:main_cli\"\n\n[tool.setuptools.packages.find]\ninclude = [\"scripts*\"]"},{"path":"babata_browser.egg-info/entry_points.txt","content":"[console_scripts]\nbabata-browser = scripts.babata_browser:main_cli"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba... Skill: Babata Browser Owner: meta-evo-creator Summary: Babata Browser v3.1 — Lightweight browser automation with CloakBrowser anti-detection (C++-level stealth Chromium). Scan-first, act-second. Playwright fallba... Tags: anti-detection:3.1.0, browser:3.1.0, browser-automation:2.0.0, chinese:2.0.0, latest:3.1.0, playwright:3.1.0, scraping:2.0.0 Version history: v3.1.0 | 2026-05-17T03:27:41.551Z | user v3.1.0: CloakBr","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1082,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:21:38.034Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:57:47.593Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}