[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FXDJXMMPFST9TCYHG6ZWF6":3,"skill-same:01M6FXDJXMMPFST9TCYHG6ZWF6":109},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6FXDJXMMPFST9TCYHG6ZWF6","stealth-browser",null,"Ultimate stealth browser automation with anti-detection, Cloudflare bypass, CAPTCHA solving, persistent sessions, and silent operation. Use for any web automation requiring bot detection evasion, login persistence, headless browsing, or bypassing security measures. Triggers on \"bypass cloudflare\", \"solve captcha\", \"stealth browse\", \"silent automation\", \"persistent login\", \"anti-detection\", or any task needing undetectable browser automation. When user asks to \"login to X website\", automatically use headed mode for login, then save session for future headless reuse.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"browser","stealth browser","stealth","session","captcha","reuse","operation","web automation","triggers","solve","use","bot","browse","save","evasion","website","cloudflare","sessions","security","browser automation","2026-11-10 10:12:30",false,"---\nname: stealth-browser\ndescription: Ultimate stealth browser automation with anti-detection, Cloudflare bypass, CAPTCHA solving, persistent sessions, and silent operation. Use for any web automation requiring bot detection evasion, login persistence, headless browsing, or bypassing security measures. Triggers on \"bypass cloudflare\", \"solve captcha\", \"stealth browse\", \"silent automation\", \"persistent login\", \"anti-detection\", or any task needing undetectable browser automation. When user asks to \"login to X website\", automatically use headed mode for login, then save session for future headless reuse.\n---\n\n# Stealth Browser Automation\n\nSilent, undetectable web automation combining multiple anti-detection layers.\n\n## Quick Login Workflow (IMPORTANT)\n\nWhen user asks to login to any website:\n\n1. **Open in headed mode** (visible browser for manual login):\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\u002Flogin\" -s sitename --headed\n```\n\n2. **User logs in manually** in the visible browser\n\n3. **Save session** after login confirmed:\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\" -s sitename --headed --save\n```\n\n4. **Future use** - load saved session (headless):\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\" -s sitename --load\n```\n\nSessions stored in: `~\u002F.clawdbot\u002Fbrowser-sessions\u002F\u003Csitename>.json`\n\n## 执行策略 (IMPORTANT)\n\n### 1. 先静默后显示\n- 优先使用 headless 模式静默尝试\n- 如果失败或需要验证码，再切换到 headed 显示模式\n- 避免打扰用户操作\n\n### 2. 断点续传\n长任务使用 `task_runner.py` 管理状态：\n```python\nfrom task_runner import TaskRunner\ntask = TaskRunner('my_task')\ntask.set_total(100)\nfor i in items:\n    if task.is_completed(i):\n        continue  # 跳过已完成\n    # 处理...\n    task.mark_completed(i)\ntask.finish()\n```\n\n### 3. 超时处理\n- 默认单页超时: 30秒\n- 长任务每50项保存一次进度\n- 失败自动重试3次\n\n### 4. 记录尝试\n所有登录尝试记录在: `~\u002F.clawdbot\u002Fbrowser-sessions\u002Fattempts.json`\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────┐\n│                  Stealth Browser                     │\n├─────────────────────────────────────────────────────┤\n│  Layer 1: Anti-Detection Engine                      │\n│  - puppeteer-extra-plugin-stealth                   │\n│  - Browser fingerprint spoofing                     │\n│  - WebGL\u002FCanvas\u002FAudio fingerprint masking           │\n├─────────────────────────────────────────────────────┤\n│  Layer 2: Challenge Bypass                          │\n│  - Cloudflare Turnstile\u002FJS Challenge               │\n│  - hCaptcha \u002F reCAPTCHA integration                │\n│  - 2Captcha \u002F Anti-Captcha API                     │\n├─────────────────────────────────────────────────────┤\n│  Layer 3: Session Persistence                       │\n│  - Cookie storage (JSON\u002FSQLite)                    │\n│  - localStorage sync                               │\n│  - Multi-profile management                        │\n├─────────────────────────────────────────────────────┤\n│  Layer 4: Proxy & Identity                         │\n│  - Rotating residential proxies                    │\n│  - User-Agent rotation                             │\n│  - Timezone\u002FLocale spoofing                        │\n└─────────────────────────────────────────────────────┘\n```\n\n## Setup\n\n### Install Core Dependencies\n\n```bash\nnpm install -g puppeteer-extra puppeteer-extra-plugin-stealth\nnpm install -g playwright\npip install undetected-chromedriver DrissionPage\n```\n\n### Optional: CAPTCHA Solvers\n\nStore API keys in `~\u002F.clawdbot\u002Fsecrets\u002Fcaptcha.json`:\n```json\n{\n  \"2captcha\": \"YOUR_2CAPTCHA_KEY\",\n  \"anticaptcha\": \"YOUR_ANTICAPTCHA_KEY\",\n  \"capsolver\": \"YOUR_CAPSOLVER_KEY\"\n}\n```\n\n### Optional: Proxy Configuration\n\nStore in `~\u002F.clawdbot\u002Fsecrets\u002Fproxies.json`:\n```json\n{\n  \"rotating\": \"http:\u002F\u002Fuser:pass@proxy.provider.com:port\",\n  \"residential\": [\"socks5:\u002F\u002Fip1:port\", \"socks5:\u002F\u002Fip2:port\"],\n  \"datacenter\": \"http:\u002F\u002Fdc-proxy:port\"\n}\n```\n\n## Quick Start\n\n### 1. Stealth Session (Python - Recommended)\n\n```python\n# scripts\u002Fstealth_session.py - use for maximum compatibility\nimport undetected_chromedriver as uc\nfrom DrissionPage import ChromiumPage\n\n# Option A: undetected-chromedriver (Selenium-based)\ndriver = uc.Chrome(headless=True, use_subprocess=True)\ndriver.get(\"https:\u002F\u002Fnowsecure.nl\")  # Test anti-detection\n\n# Option B: DrissionPage (faster, native Python)\npage = ChromiumPage()\npage.get(\"https:\u002F\u002Fcloudflare-protected-site.com\")\n```\n\n### 2. Stealth Session (Node.js)\n\n```javascript\n\u002F\u002F scripts\u002Fstealth.mjs\nimport puppeteer from 'puppeteer-extra';\nimport StealthPlugin from 'puppeteer-extra-plugin-stealth';\n\npuppeteer.use(StealthPlugin());\n\nconst browser = await puppeteer.launch({\n  headless: 'new',\n  args: [\n    '--disable-blink-features=AutomationControlled',\n    '--disable-dev-shm-usage',\n    '--no-sandbox'\n  ]\n});\n\nconst page = await browser.newPage();\nawait page.goto('https:\u002F\u002Fbot.sannysoft.com'); \u002F\u002F Verify stealth\n```\n\n## Core Operations\n\n### Open Stealth Page\n\n```bash\n# Using agent-browser with stealth profile\nagent-browser --profile ~\u002F.stealth-profile open https:\u002F\u002Ftarget.com\n\n# Or via script\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Ftarget.com\" --headless\n```\n\n### Bypass Cloudflare\n\n```python\n# Automatic CF bypass with DrissionPage\nfrom DrissionPage import ChromiumPage\n\npage = ChromiumPage()\npage.get(\"https:\u002F\u002Fcloudflare-site.com\")\n# DrissionPage waits for CF challenge automatically\n\n# Manual wait if needed\npage.wait.ele_displayed(\"main-content\", timeout=30)\n```\n\nFor stubborn Cloudflare sites, use FlareSolverr:\n\n```bash\n# Start FlareSolverr container\ndocker run -d --name flaresolverr -p 8191:8191 ghcr.io\u002Fflaresolverr\u002Fflaresolverr\n\n# Request clearance\ncurl -X POST http:\u002F\u002Flocalhost:8191\u002Fv1 \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"cmd\":\"request.get\",\"url\":\"https:\u002F\u002Fcf-protected.com\",\"maxTimeout\":60000}'\n```\n\n### Solve CAPTCHAs\n\n```python\n# scripts\u002Fsolve_captcha.py\nimport requests\nimport json\nimport time\n\ndef solve_recaptcha(site_key, page_url, api_key):\n    \"\"\"Solve reCAPTCHA v2\u002Fv3 via 2Captcha\"\"\"\n    # Submit task\n    resp = requests.post(\"http:\u002F\u002F2captcha.com\u002Fin.php\", data={\n        \"key\": api_key,\n        \"method\": \"userrecaptcha\",\n        \"googlekey\": site_key,\n        \"pageurl\": page_url,\n        \"json\": 1\n    }).json()\n    \n    task_id = resp[\"request\"]\n    \n    # Poll for result\n    for _ in range(60):\n        time.sleep(3)\n        result = requests.get(f\"http:\u002F\u002F2captcha.com\u002Fres.php?key={api_key}&action=get&id={task_id}&json=1\").json()\n        if result[\"status\"] == 1:\n            return result[\"request\"]  # Token\n    return None\n\ndef solve_hcaptcha(site_key, page_url, api_key):\n    \"\"\"Solve hCaptcha via Anti-Captcha\"\"\"\n    resp = requests.post(\"https:\u002F\u002Fapi.anti-captcha.com\u002FcreateTask\", json={\n        \"clientKey\": api_key,\n        \"task\": {\n            \"type\": \"HCaptchaTaskProxyless\",\n            \"websiteURL\": page_url,\n            \"websiteKey\": site_key\n        }\n    }).json()\n    \n    task_id = resp[\"taskId\"]\n    \n    for _ in range(60):\n        time.sleep(3)\n        result = requests.post(\"https:\u002F\u002Fapi.anti-captcha.com\u002FgetTaskResult\", json={\n            \"clientKey\": api_key,\n            \"taskId\": task_id\n        }).json()\n        if result[\"status\"] == \"ready\":\n            return result[\"solution\"][\"gRecaptchaResponse\"]\n    return None\n```\n\n### Persistent Sessions\n\n```python\n# scripts\u002Fsession_manager.py\nimport json\nimport os\nfrom pathlib import Path\n\nSESSIONS_DIR = Path.home() \u002F \".clawdbot\" \u002F \"browser-sessions\"\nSESSIONS_DIR.mkdir(parents=True, exist_ok=True)\n\ndef save_cookies(driver, session_name):\n    \"\"\"Save cookies to JSON\"\"\"\n    cookies = driver.get_cookies()\n    path = SESSIONS_DIR \u002F f\"{session_name}_cookies.json\"\n    path.write_text(json.dumps(cookies, indent=2))\n    return path\n\ndef load_cookies(driver, session_name):\n    \"\"\"Load cookies from saved session\"\"\"\n    path = SESSIONS_DIR \u002F f\"{session_name}_cookies.json\"\n    if path.exists():\n        cookies = json.loads(path.read_text())\n        for cookie in cookies:\n            driver.add_cookie(cookie)\n        return True\n    return False\n\ndef save_local_storage(page, session_name):\n    \"\"\"Save localStorage\"\"\"\n    ls = page.evaluate(\"() => JSON.stringify(localStorage)\")\n    path = SESSIONS_DIR \u002F f\"{session_name}_localStorage.json\"\n    path.write_text(ls)\n    return path\n\ndef load_local_storage(page, session_name):\n    \"\"\"Restore localStorage\"\"\"\n    path = SESSIONS_DIR \u002F f\"{session_name}_localStorage.json\"\n    if path.exists():\n        data = path.read_text()\n        page.evaluate(f\"(data) => {{ Object.entries(JSON.parse(data)).forEach(([k,v]) => localStorage.setItem(k,v)) }}\", data)\n        return True\n    return False\n```\n\n### Silent Automation Workflow\n\n```python\n# Complete silent automation example\nfrom DrissionPage import ChromiumPage, ChromiumOptions\n\n# Configure for stealth\noptions = ChromiumOptions()\noptions.headless()\noptions.set_argument('--disable-blink-features=AutomationControlled')\noptions.set_argument('--disable-dev-shm-usage')\noptions.set_user_agent('Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36')\n\npage = ChromiumPage(options)\n\n# Navigate with CF bypass\npage.get(\"https:\u002F\u002Ftarget-site.com\")\n\n# Wait for any challenges\npage.wait.doc_loaded()\n\n# Interact silently\npage.ele(\"@id=username\").input(\"user@email.com\")\npage.ele(\"@id=password\").input(\"password123\")\npage.ele(\"@type=submit\").click()\n\n# Save session for reuse\npage.cookies.save(\"~\u002F.clawdbot\u002Fbrowser-sessions\u002Ftarget-site.json\")\n```\n\n## Proxy Rotation\n\n```python\n# scripts\u002Fproxy_rotate.py\nimport random\nimport json\nfrom pathlib import Path\n\ndef get_proxy():\n    \"\"\"Get random proxy from pool\"\"\"\n    config = json.loads((Path.home() \u002F \".clawdbot\u002Fsecrets\u002Fproxies.json\").read_text())\n    proxies = config.get(\"residential\", [])\n    return random.choice(proxies) if proxies else config.get(\"rotating\")\n\n# Use with DrissionPage\noptions = ChromiumOptions()\noptions.set_proxy(get_proxy())\npage = ChromiumPage(options)\n```\n\n## User Input Required\n\nTo complete this skill, provide:\n\n1. **CAPTCHA API Keys** (optional but recommended):\n   - 2Captcha key: https:\u002F\u002F2captcha.com\n   - Anti-Captcha key: https:\u002F\u002Fanti-captcha.com\n   - CapSolver key: https:\u002F\u002Fcapsolver.com\n\n2. **Proxy Configuration** (optional):\n   - Residential proxy provider credentials\n   - Or list of SOCKS5\u002FHTTP proxies\n\n3. **Target Sites** (for pre-configured sessions):\n   - Which sites need login persistence?\n   - What credentials should be stored?\n\n## Files Structure\n\n```\nstealth-browser\u002F\n├── SKILL.md\n├── scripts\u002F\n│   ├── stealth_session.py      # Main stealth browser wrapper\n│   ├── solve_captcha.py        # CAPTCHA solving utilities\n│   ├── session_manager.py      # Cookie\u002FlocalStorage persistence\n│   ├── proxy_rotate.py         # Proxy rotation\n│   └── cf_bypass.py            # Cloudflare-specific bypass\n└── references\u002F\n    ├── fingerprints.md         # Browser fingerprint details\n    └── detection-tests.md      # Sites to test anti-detection\n```\n\n## Testing Anti-Detection\n\n```bash\n# Run these to verify stealth is working:\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fbot.sannysoft.com\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fnowsecure.nl\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Farh.antoinevastel.com\u002Fbots\u002Fareyouheadless\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fpixelscan.net\"\n```\n\n## Integration with agent-browser\n\nFor simple tasks, use agent-browser with a persistent profile:\n\n```bash\n# Create stealth profile once\nagent-browser --profile ~\u002F.stealth-profile --headed open https:\u002F\u002Flogin-site.com\n# Login manually, then close\n\n# Reuse authenticated session (headless)\nagent-browser --profile ~\u002F.stealth-profile snapshot\nagent-browser --profile ~\u002F.stealth-profile click @e5\n```\n\nFor Cloudflare or CAPTCHA-heavy sites, use Python scripts instead.\n\n## Best Practices\n\n1. **Always use headless: 'new'** not `headless: true` (less detectable)\n2. **Rotate User-Agents** matching browser version\n3. **Add random delays** between actions (100-500ms)\n4. **Use residential proxies** for sensitive targets\n5. **Save sessions** after successful login\n6. **Test on bot.sannysoft.com** before production use\n","# Stealth Browser Automation\n\nSilent, undetectable web automation combining multiple anti-detection layers.\n\n## Quick Login Workflow (IMPORTANT)\n\nWhen user asks to login to any website:\n\n1. **Open in headed mode** (visible browser for manual login):\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\u002Flogin\" -s sitename --headed\n```\n\n2. **User logs in manually** in the visible browser\n\n3. **Save session** after login confirmed:\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\" -s sitename --headed --save\n```\n\n4. **Future use** - load saved session (headless):\n```bash\npython scripts\u002Fstealth_session.py -u \"https:\u002F\u002Ftarget.com\" -s sitename --load\n```\n\nSessions stored in: `~\u002F.clawdbot\u002Fbrowser-sessions\u002F\u003Csitename>.json`\n\n## 执行策略 (IMPORTANT)\n\n### 1. 先静默后显示\n- 优先使用 headless 模式静默尝试\n- 如果失败或需要验证码，再切换到 headed 显示模式\n- 避免打扰用户操作\n\n### 2. 断点续传\n长任务使用 `task_runner.py` 管理状态：\n```python\nfrom task_runner import TaskRunner\ntask = TaskRunner('my_task')\ntask.set_total(100)\nfor i in items:\n    if task.is_completed(i):\n        continue  # 跳过已完成\n    # 处理...\n    task.mark_completed(i)\ntask.finish()\n```\n\n### 3. 超时处理\n- 默认单页超时: 30秒\n- 长任务每50项保存一次进度\n- 失败自动重试3次\n\n### 4. 记录尝试\n所有登录尝试记录在: `~\u002F.clawdbot\u002Fbrowser-sessions\u002Fattempts.json`\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────┐\n│                  Stealth Browser                     │\n├─────────────────────────────────────────────────────┤\n│  Layer 1: Anti-Detection Engine                      │\n│  - puppeteer-extra-plugin-stealth                   │\n│  - Browser fingerprint spoofing                     │\n│  - WebGL\u002FCanvas\u002FAudio fingerprint masking           │\n├─────────────────────────────────────────────────────┤\n│  Layer 2: Challenge Bypass                          │\n│  - Cloudflare Turnstile\u002FJS Challenge               │\n│  - hCaptcha \u002F reCAPTCHA integration                │\n│  - 2Captcha \u002F Anti-Captcha API                     │\n├─────────────────────────────────────────────────────┤\n│  Layer 3: Session Persistence                       │\n│  - Cookie storage (JSON\u002FSQLite)                    │\n│  - localStorage sync                               │\n│  - Multi-profile management                        │\n├─────────────────────────────────────────────────────┤\n│  Layer 4: Proxy & Identity                         │\n│  - Rotating residential proxies                    │\n│  - User-Agent rotation                             │\n│  - Timezone\u002FLocale spoofing                        │\n└─────────────────────────────────────────────────────┘\n```\n\n## Setup\n\n### Install Core Dependencies\n\n```bash\nnpm install -g puppeteer-extra puppeteer-extra-plugin-stealth\nnpm install -g playwright\npip install undetected-chromedriver DrissionPage\n```\n\n### Optional: CAPTCHA Solvers\n\nStore API keys in `~\u002F.clawdbot\u002Fsecrets\u002Fcaptcha.json`:\n```json\n{\n  \"2captcha\": \"YOUR_2CAPTCHA_KEY\",\n  \"anticaptcha\": \"YOUR_ANTICAPTCHA_KEY\",\n  \"capsolver\": \"YOUR_CAPSOLVER_KEY\"\n}\n```\n\n### Optional: Proxy Configuration\n\nStore in `~\u002F.clawdbot\u002Fsecrets\u002Fproxies.json`:\n```json\n{\n  \"rotating\": \"http:\u002F\u002Fuser:pass@proxy.provider.com:port\",\n  \"residential\": [\"socks5:\u002F\u002Fip1:port\", \"socks5:\u002F\u002Fip2:port\"],\n  \"datacenter\": \"http:\u002F\u002Fdc-proxy:port\"\n}\n```\n\n## Quick Start\n\n### 1. Stealth Session (Python - Recommended)\n\n```python\n# scripts\u002Fstealth_session.py - use for maximum compatibility\nimport undetected_chromedriver as uc\nfrom DrissionPage import ChromiumPage\n\n# Option A: undetected-chromedriver (Selenium-based)\ndriver = uc.Chrome(headless=True, use_subprocess=True)\ndriver.get(\"https:\u002F\u002Fnowsecure.nl\")  # Test anti-detection\n\n# Option B: DrissionPage (faster, native Python)\npage = ChromiumPage()\npage.get(\"https:\u002F\u002Fcloudflare-protected-site.com\")\n```\n\n### 2. Stealth Session (Node.js)\n\n```javascript\n\u002F\u002F scripts\u002Fstealth.mjs\nimport puppeteer from 'puppeteer-extra';\nimport StealthPlugin from 'puppeteer-extra-plugin-stealth';\n\npuppeteer.use(StealthPlugin());\n\nconst browser = await puppeteer.launch({\n  headless: 'new',\n  args: [\n    '--disable-blink-features=AutomationControlled',\n    '--disable-dev-shm-usage',\n    '--no-sandbox'\n  ]\n});\n\nconst page = await browser.newPage();\nawait page.goto('https:\u002F\u002Fbot.sannysoft.com'); \u002F\u002F Verify stealth\n```\n\n## Core Operations\n\n### Open Stealth Page\n\n```bash\n# Using agent-browser with stealth profile\nagent-browser --profile ~\u002F.stealth-profile open https:\u002F\u002Ftarget.com\n\n# Or via script\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Ftarget.com\" --headless\n```\n\n### Bypass Cloudflare\n\n```python\n# Automatic CF bypass with DrissionPage\nfrom DrissionPage import ChromiumPage\n\npage = ChromiumPage()\npage.get(\"https:\u002F\u002Fcloudflare-site.com\")\n# DrissionPage waits for CF challenge automatically\n\n# Manual wait if needed\npage.wait.ele_displayed(\"main-content\", timeout=30)\n```\n\nFor stubborn Cloudflare sites, use FlareSolverr:\n\n```bash\n# Start FlareSolverr container\ndocker run -d --name flaresolverr -p 8191:8191 ghcr.io\u002Fflaresolverr\u002Fflaresolverr\n\n# Request clearance\ncurl -X POST http:\u002F\u002Flocalhost:8191\u002Fv1 \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"cmd\":\"request.get\",\"url\":\"https:\u002F\u002Fcf-protected.com\",\"maxTimeout\":60000}'\n```\n\n### Solve CAPTCHAs\n\n```python\n# scripts\u002Fsolve_captcha.py\nimport requests\nimport json\nimport time\n\ndef solve_recaptcha(site_key, page_url, api_key):\n    \"\"\"Solve reCAPTCHA v2\u002Fv3 via 2Captcha\"\"\"\n    # Submit task\n    resp = requests.post(\"http:\u002F\u002F2captcha.com\u002Fin.php\", data={\n        \"key\": api_key,\n        \"method\": \"userrecaptcha\",\n        \"googlekey\": site_key,\n        \"pageurl\": page_url,\n        \"json\": 1\n    }).json()\n    \n    task_id = resp[\"request\"]\n    \n    # Poll for result\n    for _ in range(60):\n        time.sleep(3)\n        result = requests.get(f\"http:\u002F\u002F2captcha.com\u002Fres.php?key={api_key}&action=get&id={task_id}&json=1\").json()\n        if result[\"status\"] == 1:\n            return result[\"request\"]  # Token\n    return None\n\ndef solve_hcaptcha(site_key, page_url, api_key):\n    \"\"\"Solve hCaptcha via Anti-Captcha\"\"\"\n    resp = requests.post(\"https:\u002F\u002Fapi.anti-captcha.com\u002FcreateTask\", json={\n        \"clientKey\": api_key,\n        \"task\": {\n            \"type\": \"HCaptchaTaskProxyless\",\n            \"websiteURL\": page_url,\n            \"websiteKey\": site_key\n        }\n    }).json()\n    \n    task_id = resp[\"taskId\"]\n    \n    for _ in range(60):\n        time.sleep(3)\n        result = requests.post(\"https:\u002F\u002Fapi.anti-captcha.com\u002FgetTaskResult\", json={\n            \"clientKey\": api_key,\n            \"taskId\": task_id\n        }).json()\n        if result[\"status\"] == \"ready\":\n            return result[\"solution\"][\"gRecaptchaResponse\"]\n    return None\n```\n\n### Persistent Sessions\n\n```python\n# scripts\u002Fsession_manager.py\nimport json\nimport os\nfrom pathlib import Path\n\nSESSIONS_DIR = Path.home() \u002F \".clawdbot\" \u002F \"browser-sessions\"\nSESSIONS_DIR.mkdir(parents=True, exist_ok=True)\n\ndef save_cookies(driver, session_name):\n    \"\"\"Save cookies to JSON\"\"\"\n    cookies = driver.get_cookies()\n    path = SESSIONS_DIR \u002F f\"{session_name}_cookies.json\"\n    path.write_text(json.dumps(cookies, indent=2))\n    return path\n\ndef load_cookies(driver, session_name):\n    \"\"\"Load cookies from saved session\"\"\"\n    path = SESSIONS_DIR \u002F f\"{session_name}_cookies.json\"\n    if path.exists():\n        cookies = json.loads(path.read_text())\n        for cookie in cookies:\n            driver.add_cookie(cookie)\n        return True\n    return False\n\ndef save_local_storage(page, session_name):\n    \"\"\"Save localStorage\"\"\"\n    ls = page.evaluate(\"() => JSON.stringify(localStorage)\")\n    path = SESSIONS_DIR \u002F f\"{session_name}_localStorage.json\"\n    path.write_text(ls)\n    return path\n\ndef load_local_storage(page, session_name):\n    \"\"\"Restore localStorage\"\"\"\n    path = SESSIONS_DIR \u002F f\"{session_name}_localStorage.json\"\n    if path.exists():\n        data = path.read_text()\n        page.evaluate(f\"(data) => {{ Object.entries(JSON.parse(data)).forEach(([k,v]) => localStorage.setItem(k,v)) }}\", data)\n        return True\n    return False\n```\n\n### Silent Automation Workflow\n\n```python\n# Complete silent automation example\nfrom DrissionPage import ChromiumPage, ChromiumOptions\n\n# Configure for stealth\noptions = ChromiumOptions()\noptions.headless()\noptions.set_argument('--disable-blink-features=AutomationControlled')\noptions.set_argument('--disable-dev-shm-usage')\noptions.set_user_agent('Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36')\n\npage = ChromiumPage(options)\n\n# Navigate with CF bypass\npage.get(\"https:\u002F\u002Ftarget-site.com\")\n\n# Wait for any challenges\npage.wait.doc_loaded()\n\n# Interact silently\npage.ele(\"@id=username\").input(\"user@email.com\")\npage.ele(\"@id=password\").input(\"password123\")\npage.ele(\"@type=submit\").click()\n\n# Save session for reuse\npage.cookies.save(\"~\u002F.clawdbot\u002Fbrowser-sessions\u002Ftarget-site.json\")\n```\n\n## Proxy Rotation\n\n```python\n# scripts\u002Fproxy_rotate.py\nimport random\nimport json\nfrom pathlib import Path\n\ndef get_proxy():\n    \"\"\"Get random proxy from pool\"\"\"\n    config = json.loads((Path.home() \u002F \".clawdbot\u002Fsecrets\u002Fproxies.json\").read_text())\n    proxies = config.get(\"residential\", [])\n    return random.choice(proxies) if proxies else config.get(\"rotating\")\n\n# Use with DrissionPage\noptions = ChromiumOptions()\noptions.set_proxy(get_proxy())\npage = ChromiumPage(options)\n```\n\n## User Input Required\n\nTo complete this skill, provide:\n\n1. **CAPTCHA API Keys** (optional but recommended):\n   - 2Captcha key: https:\u002F\u002F2captcha.com\n   - Anti-Captcha key: https:\u002F\u002Fanti-captcha.com\n   - CapSolver key: https:\u002F\u002Fcapsolver.com\n\n2. **Proxy Configuration** (optional):\n   - Residential proxy provider credentials\n   - Or list of SOCKS5\u002FHTTP proxies\n\n3. **Target Sites** (for pre-configured sessions):\n   - Which sites need login persistence?\n   - What credentials should be stored?\n\n## Files Structure\n\n```\nstealth-browser\u002F\n├── SKILL.md\n├── scripts\u002F\n│   ├── stealth_session.py      # Main stealth browser wrapper\n│   ├── solve_captcha.py        # CAPTCHA solving utilities\n│   ├── session_manager.py      # Cookie\u002FlocalStorage persistence\n│   ├── proxy_rotate.py         # Proxy rotation\n│   └── cf_bypass.py            # Cloudflare-specific bypass\n└── references\u002F\n    ├── fingerprints.md         # Browser fingerprint details\n    └── detection-tests.md      # Sites to test anti-detection\n```\n\n## Testing Anti-Detection\n\n```bash\n# Run these to verify stealth is working:\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fbot.sannysoft.com\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fnowsecure.nl\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Farh.antoinevastel.com\u002Fbots\u002Fareyouheadless\"\npython scripts\u002Fstealth_open.py --url \"https:\u002F\u002Fpixelscan.net\"\n```\n\n## Integration with agent-browser\n\nFor simple tasks, use agent-browser with a persistent profile:\n\n```bash\n# Create stealth profile once\nagent-browser --profile ~\u002F.stealth-profile --headed open https:\u002F\u002Flogin-site.com\n# Login manually, then close\n\n# Reuse authenticated session (headless)\nagent-browser --profile ~\u002F.stealth-profile snapshot\nagent-browser --profile ~\u002F.stealth-profile click @e5\n```\n\nFor Cloudflare or CAPTCHA-heavy sites, use Python scripts instead.\n\n## Best Practices\n\n1. **Always use headless: 'new'** not `headless: true` (less detectable)\n2. **Rotate User-Agents** matching browser version\n3. **Add random delays** between actions (100-500ms)\n4. **Use residential proxies** for sensitive targets\n5. **Save sessions** after successful login\n6. **Test on bot.sannysoft.com** before production use\n",{"name":5,"description":7},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fmayuqi-crypto\u002Fstealth-browser",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add kbarbel640-del\u002Fskills --skill stealth-browser",{"tool":61,"command":62},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill stealth-browser",{"tool":64,"command":65},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill stealth-browser","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002FSKILL.md",true,[69,75,81,85,89,93,97,101,105],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"_meta.json","REFERENCE","参考文档",289,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002F_meta.json",{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fcf_bypass.py","SCRIPT","脚本",8865,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fcf_bypass.py",{"path":82,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":83,"sourceHtmlUrl":84},"scripts\u002Flogin_session.py",8924,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Flogin_session.py",{"path":86,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fproxy_rotate.py",8838,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fproxy_rotate.py",{"path":90,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Fsession_manager.py",10026,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fsession_manager.py",{"path":94,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":95,"sourceHtmlUrl":96},"scripts\u002Fsmart_login.py",7858,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fsmart_login.py",{"path":98,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":99,"sourceHtmlUrl":100},"scripts\u002Fsolve_captcha.py",11803,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fsolve_captcha.py",{"path":102,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Fstealth_session.py",8444,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Fstealth_session.py",{"path":106,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":107,"sourceHtmlUrl":108},"scripts\u002Ftask_runner.py",5766,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmayuqi-crypto\u002Fstealth-browser\u002Fscripts\u002Ftask_runner.py",[110,141,162,183,189,209],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":43},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":43},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[147],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[149,124,150,151,23,152,153,154,42,34,155,156,157,158,159,160,161,129,33],"dilemm ai","arena","analyze","openclaw agent","create","automation","openclaw","design","strategy","headless","compete","submit","matchmaking",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":171,"publishedAt":43},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[172,173,174,175,176,177,178,125,179,160,33,180,124,181,182],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":184,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":188,"publishedAt":43},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[187],{"categoryNo":169,"categoryName":170,"taxonomyType":20,"taxonomyTypeDesc":21},[175,174,173,172,182,177,178,125,176,160,33,179,180,124,181],{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":43},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[196,197,198,199,200,201,202,203,204,205,206,207,208],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":219,"publishedAt":43},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[215,216],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":217,"categoryName":218,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000037","律师与法务",[220,221,222,223,125,224,225,48,226,180,227,228,229,230,231,138,232,233,234],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]