[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FTSRP9WPP2WX90ZXZVRGXT":3,"skill-same:01M6FTSRP9WPP2WX90ZXZVRGXT":107},{"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":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6FTSRP9WPP2WX90ZXZVRGXT","camoufox-stealth",null,"C++ level anti-bot browser automation using Camoufox (patched Firefox) in isolated containers. Bypasses Cloudflare Turnstile, Datadome, Airbnb, Yelp. Superior to Chrome-based solutions (undetected-chromedriver, puppeteer-stealth) which only patch at JS level. Use when standard Playwright\u002FSelenium gets blocked.","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\u002Fkesslerio\u002Fcamoufox-stealth\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"camoufox stealth","camoufox","stealth","selenium","cloudflare turnstile","c++","patch","only","use","js","bot","cloudflare","puppeteer","browser","playwright","firefox","chrome","automation","containers","browser automation","2026-11-10 10:12:30",false,"---\nname: camoufox-stealth\ndescription: C++ level anti-bot browser automation using Camoufox (patched Firefox) in isolated containers. Bypasses Cloudflare Turnstile, Datadome, Airbnb, Yelp. Superior to Chrome-based solutions (undetected-chromedriver, puppeteer-stealth) which only patch at JS level. Use when standard Playwright\u002FSelenium gets blocked.\nmetadata:\n  openclaw:\n    emoji: \"?\"\n    requires:\n      bins: [\"distrobox\"]\n      env: []\n---\n\n# Camoufox Stealth Browser ?\n\n**C++ level** anti-bot evasion using Camoufox — a custom Firefox fork with stealth patches compiled into the browser itself, not bolted on via JavaScript.\n\n## Why Camoufox > Chrome-based Solutions\n\n| Approach | Detection Level | Tools |\n|----------|-----------------|-------|\n| **Camoufox (this skill)** | C++ compiled patches | Undetectable fingerprints baked into browser |\n| undetected-chromedriver | JS runtime patches | Can be detected by timing analysis |\n| puppeteer-stealth | JS injection | Patches applied after page load = detectable |\n| playwright-stealth | JS injection | Same limitations |\n\n**Camoufox patches Firefox at the source code level** — WebGL, Canvas, AudioContext fingerprints are genuinely spoofed, not masked by JavaScript overrides that anti-bot systems can detect.\n\n## Key Advantages\n\n1. **C++ Level Stealth** — Fingerprint spoofing compiled into the browser, not JS hacks\n2. **Container Isolation** — Runs in distrobox, keeping your host system clean\n3. **Dual-Tool Approach** — Camoufox for browsers, curl_cffi for API-only (no browser overhead)\n4. **Firefox-Based** — Less fingerprinted than Chrome (everyone uses Chrome for bots)\n\n## When to Use\n\n- Standard Playwright\u002FSelenium gets blocked\n- Site shows Cloudflare challenge or \"checking your browser\"\n- Need to scrape Airbnb, Yelp, or similar protected sites\n- `puppeteer-stealth` or `undetected-chromedriver` stopped working\n- You need **actual** stealth, not JS band-aids\n\n## Tool Selection\n\n| Tool | Level | Best For |\n|------|-------|----------|\n| **Camoufox** | C++ patches | All protected sites - Cloudflare, Datadome, Yelp, Airbnb |\n| **curl_cffi** | TLS spoofing | API endpoints only - no JS needed, very fast |\n\n## Quick Start\n\nAll scripts run in `pybox` distrobox for isolation.\n\n⚠️ **Use `python3.14` explicitly** - pybox may have multiple Python versions with different packages installed.\n\n### 1. Setup (First Time)\n\n```bash\n# Install tools in pybox (use python3.14)\ndistrobox-enter pybox -- python3.14 -m pip install camoufox curl_cffi\n\n# Camoufox browser downloads automatically on first run (~700MB Firefox fork)\n```\n\n### 2. Fetch a Protected Page\n\n**Browser (Camoufox):**\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \"https:\u002F\u002Fexample.com\" --headless\n```\n\n**API only (curl_cffi):**\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcurl-api.py \"https:\u002F\u002Fapi.example.com\u002Fendpoint\"\n```\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                     OpenClaw Agent                       │\n├─────────────────────────────────────────────────────────┤\n│  distrobox-enter pybox -- python3.14 scripts\u002Fxxx.py         │\n├─────────────────────────────────────────────────────────┤\n│                      pybox Container                     │\n│         ┌─────────────┐  ┌─────────────┐               │\n│         │  Camoufox   │  │  curl_cffi  │               │\n│         │  (Firefox)  │  │  (TLS spoof)│               │\n│         └─────────────┘  └─────────────┘               │\n└─────────────────────────────────────────────────────────┘\n```\n\n## Tool Details\n\n### Camoufox  \n- **What:** Custom Firefox build with C++ level stealth patches\n- **Pros:** Best fingerprint evasion, passes Turnstile automatically\n- **Cons:** ~700MB download, Firefox-based\n- **Best for:** All protected sites - Cloudflare, Datadome, Yelp, Airbnb\n\n### curl_cffi\n- **What:** Python HTTP client with browser TLS fingerprint spoofing\n- **Pros:** No browser overhead, very fast\n- **Cons:** No JS execution, API endpoints only\n- **Best for:** Known API endpoints, mobile app reverse engineering\n\n## Critical: Proxy Requirements\n\n**Datacenter IPs (AWS, DigitalOcean) = INSTANT BLOCK on Airbnb\u002FYelp**\n\nYou MUST use residential or mobile proxies:\n\n```python\n# Example proxy config\nproxy = \"http:\u002F\u002Fuser:pass@residential-proxy.example.com:8080\"\n```\n\nSee **[references\u002Fproxy-setup.md](references\u002Fproxy-setup.md)** for proxy configuration.\n\n## Behavioral Tips\n\nSites like Airbnb\u002FYelp use behavioral analysis. To avoid detection:\n\n1. **Warm up:** Don't hit target URL directly. Visit homepage first, scroll, click around.\n2. **Mouse movements:** Inject random mouse movements (Camoufox handles this).\n3. **Timing:** Add random delays (2-5s between actions), not fixed intervals.\n4. **Session stickiness:** Use same proxy IP for 10-30 min sessions, don't rotate every request.\n\n## Headless Mode Warning\n\n⚠️ Old `--headless` flag is DETECTED. Options:\n\n1. **New Headless:** Use `headless=\"new\"` (Chrome 109+)\n2. **Xvfb:** Run headed browser in virtual display\n3. **Headed:** Just run headed if you can (most reliable)\n\n```bash\n# Xvfb approach (Linux)\nXvfb :99 -screen 0 1920x1080x24 &\nexport DISPLAY=:99\npython scripts\u002Fcamoufox-fetch.py \"https:\u002F\u002Fexample.com\"\n```\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| \"Access Denied\" immediately | Use residential proxy |\n| Cloudflare challenge loops | Try Camoufox instead of Nodriver |\n| Browser crashes in pybox | Install missing deps: `sudo dnf install gtk3 libXt` |\n| TLS fingerprint blocked | Use curl_cffi with `impersonate=\"chrome120\"` |\n| Turnstile checkbox appears | Add mouse movement, increase wait time |\n| `ModuleNotFoundError: camoufox` | Use `python3.14` not `python` or `python3` |\n| `greenlet` segfault (exit 139) | Python version mismatch - use `python3.14` explicitly |\n| `libstdc++.so.6` errors | NixOS lib path issue - use `python3.14` in pybox |\n\n### Python Version Issues (NixOS\u002Fpybox)\n\nThe `pybox` container may have multiple Python versions with separate site-packages:\n\n```bash\n# Check which Python has camoufox\ndistrobox-enter pybox -- python3.14 -c \"import camoufox; print('OK')\"\n\n# Wrong (may use different Python)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py ...\n\n# Correct (explicit version)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py ...\n```\n\nIf you get segfaults or import errors, always use `python3.14` explicitly.\n\n## Examples\n\n### Scrape Airbnb Listing\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \\\n  \"https:\u002F\u002Fwww.airbnb.com\u002Frooms\u002F12345\" \\\n  --headless --wait 10 \\\n  --screenshot airbnb.png\n```\n\n### Scrape Yelp Business\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \\\n  \"https:\u002F\u002Fwww.yelp.com\u002Fbiz\u002Fsome-restaurant\" \\\n  --headless --wait 8 \\\n  --output yelp.html\n```\n\n### API Scraping with TLS Spoofing\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcurl-api.py \\\n  \"https:\u002F\u002Fapi.yelp.com\u002Fv3\u002Fbusinesses\u002Fsearch?term=coffee&location=SF\" \\\n  --headers '{\"Authorization\": \"Bearer xxx\"}'\n```\n\n## Session Management\n\nPersistent sessions allow reusing authenticated state across runs without re-logging in.\n\n### Quick Start\n\n```bash\n# 1. Login interactively (headed browser opens)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --login \"https:\u002F\u002Fwww.airbnb.com\u002Faccount-settings\"\n\n# Complete login in browser, then press Enter to save session\n\n# 2. Reuse session in headless mode\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --headless \"https:\u002F\u002Fwww.airbnb.com\u002Ftrips\"\n\n# 3. Check session status\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --status \"https:\u002F\u002Fwww.airbnb.com\"\n```\n\n### Flags\n\n| Flag | Description |\n|------|-------------|\n| `--profile NAME` | Named profile for session storage (required) |\n| `--login` | Interactive login mode - opens headed browser |\n| `--headless` | Use saved session in headless mode |\n| `--status` | Check if session appears valid |\n| `--export-cookies FILE` | Export cookies to JSON for backup |\n| `--import-cookies FILE` | Import cookies from JSON file |\n\n### Storage\n\n- **Location:** `~\u002F.stealth-browser\u002Fprofiles\u002F\u003Cname>\u002F`\n- **Permissions:** Directory `700`, files `600`\n- **Profile names:** Letters, numbers, `_`, `-` only (1-63 chars)\n\n### Cookie Handling\n\n- **Save:** All cookies from all domains stored in browser profile\n- **Restore:** Only cookies matching target URL domain are used\n- **SSO:** If redirected to Google\u002Fauth domain, re-authenticate once and profile updates\n\n### Login Wall Detection\n\nThe script detects session expiry using multiple signals:\n\n1. **HTTP status:** 401, 403\n2. **URL patterns:** `\u002Flogin`, `\u002Fsignin`, `\u002Fauth`\n3. **Title patterns:** \"login\", \"sign in\", etc.\n4. **Content keywords:** \"captcha\", \"verify\", \"authenticate\"\n5. **Form detection:** Password input fields\n\nIf detected during `--headless` mode, you'll see:\n```\n? Login wall signals: url-path, password-form\n```\n\nRe-run with `--login` to refresh the session.\n\n### Remote Login (SSH)\n\nSince `--login` requires a visible browser, you need display forwarding:\n\n**X11 Forwarding (Preferred):**\n```bash\n# Connect with X11 forwarding\nssh -X user@server\n\n# Run login (opens browser on your local machine)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile mysite --login \"https:\u002F\u002Fexample.com\"\n```\n\n**VNC Alternative:**\n```bash\n# On server: start VNC session\nvncserver :1\n\n# On client: connect to VNC\nvncviewer server:1\n\n# In VNC session: run login\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile mysite --login \"https:\u002F\u002Fexample.com\"\n```\n\n### Security Notes\n\n⚠️ **Cookies are credentials.** Treat profile directories like passwords:\n- Profile dirs have `chmod 700` (owner only)\n- Cookie exports have `chmod 600`\n- Don't share profiles or exported cookies over insecure channels\n- Consider encrypting backups\n\n### Limitations\n\n| Limitation | Reason |\n|------------|--------|\n| localStorage\u002FsessionStorage not exported | Use browser profile instead (handles automatically) |\n| IndexedDB not portable | Stored in browser profile, not cookie export |\n| No parallel profile access | No file locking in v1; use one process per profile |\n\n## References\n\n- [references\u002Fproxy-setup.md](references\u002Fproxy-setup.md) — Proxy configuration guide\n- [references\u002Ffingerprint-checks.md](references\u002Ffingerprint-checks.md) — What anti-bot systems check\n","# Camoufox Stealth Browser ?\n\n**C++ level** anti-bot evasion using Camoufox — a custom Firefox fork with stealth patches compiled into the browser itself, not bolted on via JavaScript.\n\n## Why Camoufox > Chrome-based Solutions\n\n| Approach | Detection Level | Tools |\n|----------|-----------------|-------|\n| **Camoufox (this skill)** | C++ compiled patches | Undetectable fingerprints baked into browser |\n| undetected-chromedriver | JS runtime patches | Can be detected by timing analysis |\n| puppeteer-stealth | JS injection | Patches applied after page load = detectable |\n| playwright-stealth | JS injection | Same limitations |\n\n**Camoufox patches Firefox at the source code level** — WebGL, Canvas, AudioContext fingerprints are genuinely spoofed, not masked by JavaScript overrides that anti-bot systems can detect.\n\n## Key Advantages\n\n1. **C++ Level Stealth** — Fingerprint spoofing compiled into the browser, not JS hacks\n2. **Container Isolation** — Runs in distrobox, keeping your host system clean\n3. **Dual-Tool Approach** — Camoufox for browsers, curl_cffi for API-only (no browser overhead)\n4. **Firefox-Based** — Less fingerprinted than Chrome (everyone uses Chrome for bots)\n\n## When to Use\n\n- Standard Playwright\u002FSelenium gets blocked\n- Site shows Cloudflare challenge or \"checking your browser\"\n- Need to scrape Airbnb, Yelp, or similar protected sites\n- `puppeteer-stealth` or `undetected-chromedriver` stopped working\n- You need **actual** stealth, not JS band-aids\n\n## Tool Selection\n\n| Tool | Level | Best For |\n|------|-------|----------|\n| **Camoufox** | C++ patches | All protected sites - Cloudflare, Datadome, Yelp, Airbnb |\n| **curl_cffi** | TLS spoofing | API endpoints only - no JS needed, very fast |\n\n## Quick Start\n\nAll scripts run in `pybox` distrobox for isolation.\n\n⚠️ **Use `python3.14` explicitly** - pybox may have multiple Python versions with different packages installed.\n\n### 1. Setup (First Time)\n\n```bash\n# Install tools in pybox (use python3.14)\ndistrobox-enter pybox -- python3.14 -m pip install camoufox curl_cffi\n\n# Camoufox browser downloads automatically on first run (~700MB Firefox fork)\n```\n\n### 2. Fetch a Protected Page\n\n**Browser (Camoufox):**\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \"https:\u002F\u002Fexample.com\" --headless\n```\n\n**API only (curl_cffi):**\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcurl-api.py \"https:\u002F\u002Fapi.example.com\u002Fendpoint\"\n```\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                     OpenClaw Agent                       │\n├─────────────────────────────────────────────────────────┤\n│  distrobox-enter pybox -- python3.14 scripts\u002Fxxx.py         │\n├─────────────────────────────────────────────────────────┤\n│                      pybox Container                     │\n│         ┌─────────────┐  ┌─────────────┐               │\n│         │  Camoufox   │  │  curl_cffi  │               │\n│         │  (Firefox)  │  │  (TLS spoof)│               │\n│         └─────────────┘  └─────────────┘               │\n└─────────────────────────────────────────────────────────┘\n```\n\n## Tool Details\n\n### Camoufox  \n- **What:** Custom Firefox build with C++ level stealth patches\n- **Pros:** Best fingerprint evasion, passes Turnstile automatically\n- **Cons:** ~700MB download, Firefox-based\n- **Best for:** All protected sites - Cloudflare, Datadome, Yelp, Airbnb\n\n### curl_cffi\n- **What:** Python HTTP client with browser TLS fingerprint spoofing\n- **Pros:** No browser overhead, very fast\n- **Cons:** No JS execution, API endpoints only\n- **Best for:** Known API endpoints, mobile app reverse engineering\n\n## Critical: Proxy Requirements\n\n**Datacenter IPs (AWS, DigitalOcean) = INSTANT BLOCK on Airbnb\u002FYelp**\n\nYou MUST use residential or mobile proxies:\n\n```python\n# Example proxy config\nproxy = \"http:\u002F\u002Fuser:pass@residential-proxy.example.com:8080\"\n```\n\nSee **[references\u002Fproxy-setup.md](references\u002Fproxy-setup.md)** for proxy configuration.\n\n## Behavioral Tips\n\nSites like Airbnb\u002FYelp use behavioral analysis. To avoid detection:\n\n1. **Warm up:** Don't hit target URL directly. Visit homepage first, scroll, click around.\n2. **Mouse movements:** Inject random mouse movements (Camoufox handles this).\n3. **Timing:** Add random delays (2-5s between actions), not fixed intervals.\n4. **Session stickiness:** Use same proxy IP for 10-30 min sessions, don't rotate every request.\n\n## Headless Mode Warning\n\n⚠️ Old `--headless` flag is DETECTED. Options:\n\n1. **New Headless:** Use `headless=\"new\"` (Chrome 109+)\n2. **Xvfb:** Run headed browser in virtual display\n3. **Headed:** Just run headed if you can (most reliable)\n\n```bash\n# Xvfb approach (Linux)\nXvfb :99 -screen 0 1920x1080x24 &\nexport DISPLAY=:99\npython scripts\u002Fcamoufox-fetch.py \"https:\u002F\u002Fexample.com\"\n```\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| \"Access Denied\" immediately | Use residential proxy |\n| Cloudflare challenge loops | Try Camoufox instead of Nodriver |\n| Browser crashes in pybox | Install missing deps: `sudo dnf install gtk3 libXt` |\n| TLS fingerprint blocked | Use curl_cffi with `impersonate=\"chrome120\"` |\n| Turnstile checkbox appears | Add mouse movement, increase wait time |\n| `ModuleNotFoundError: camoufox` | Use `python3.14` not `python` or `python3` |\n| `greenlet` segfault (exit 139) | Python version mismatch - use `python3.14` explicitly |\n| `libstdc++.so.6` errors | NixOS lib path issue - use `python3.14` in pybox |\n\n### Python Version Issues (NixOS\u002Fpybox)\n\nThe `pybox` container may have multiple Python versions with separate site-packages:\n\n```bash\n# Check which Python has camoufox\ndistrobox-enter pybox -- python3.14 -c \"import camoufox; print('OK')\"\n\n# Wrong (may use different Python)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py ...\n\n# Correct (explicit version)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py ...\n```\n\nIf you get segfaults or import errors, always use `python3.14` explicitly.\n\n## Examples\n\n### Scrape Airbnb Listing\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \\\n  \"https:\u002F\u002Fwww.airbnb.com\u002Frooms\u002F12345\" \\\n  --headless --wait 10 \\\n  --screenshot airbnb.png\n```\n\n### Scrape Yelp Business\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-fetch.py \\\n  \"https:\u002F\u002Fwww.yelp.com\u002Fbiz\u002Fsome-restaurant\" \\\n  --headless --wait 8 \\\n  --output yelp.html\n```\n\n### API Scraping with TLS Spoofing\n\n```bash\ndistrobox-enter pybox -- python3.14 scripts\u002Fcurl-api.py \\\n  \"https:\u002F\u002Fapi.yelp.com\u002Fv3\u002Fbusinesses\u002Fsearch?term=coffee&location=SF\" \\\n  --headers '{\"Authorization\": \"Bearer xxx\"}'\n```\n\n## Session Management\n\nPersistent sessions allow reusing authenticated state across runs without re-logging in.\n\n### Quick Start\n\n```bash\n# 1. Login interactively (headed browser opens)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --login \"https:\u002F\u002Fwww.airbnb.com\u002Faccount-settings\"\n\n# Complete login in browser, then press Enter to save session\n\n# 2. Reuse session in headless mode\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --headless \"https:\u002F\u002Fwww.airbnb.com\u002Ftrips\"\n\n# 3. Check session status\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile airbnb --status \"https:\u002F\u002Fwww.airbnb.com\"\n```\n\n### Flags\n\n| Flag | Description |\n|------|-------------|\n| `--profile NAME` | Named profile for session storage (required) |\n| `--login` | Interactive login mode - opens headed browser |\n| `--headless` | Use saved session in headless mode |\n| `--status` | Check if session appears valid |\n| `--export-cookies FILE` | Export cookies to JSON for backup |\n| `--import-cookies FILE` | Import cookies from JSON file |\n\n### Storage\n\n- **Location:** `~\u002F.stealth-browser\u002Fprofiles\u002F\u003Cname>\u002F`\n- **Permissions:** Directory `700`, files `600`\n- **Profile names:** Letters, numbers, `_`, `-` only (1-63 chars)\n\n### Cookie Handling\n\n- **Save:** All cookies from all domains stored in browser profile\n- **Restore:** Only cookies matching target URL domain are used\n- **SSO:** If redirected to Google\u002Fauth domain, re-authenticate once and profile updates\n\n### Login Wall Detection\n\nThe script detects session expiry using multiple signals:\n\n1. **HTTP status:** 401, 403\n2. **URL patterns:** `\u002Flogin`, `\u002Fsignin`, `\u002Fauth`\n3. **Title patterns:** \"login\", \"sign in\", etc.\n4. **Content keywords:** \"captcha\", \"verify\", \"authenticate\"\n5. **Form detection:** Password input fields\n\nIf detected during `--headless` mode, you'll see:\n```\n? Login wall signals: url-path, password-form\n```\n\nRe-run with `--login` to refresh the session.\n\n### Remote Login (SSH)\n\nSince `--login` requires a visible browser, you need display forwarding:\n\n**X11 Forwarding (Preferred):**\n```bash\n# Connect with X11 forwarding\nssh -X user@server\n\n# Run login (opens browser on your local machine)\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile mysite --login \"https:\u002F\u002Fexample.com\"\n```\n\n**VNC Alternative:**\n```bash\n# On server: start VNC session\nvncserver :1\n\n# On client: connect to VNC\nvncviewer server:1\n\n# In VNC session: run login\ndistrobox-enter pybox -- python3.14 scripts\u002Fcamoufox-session.py \\\n  --profile mysite --login \"https:\u002F\u002Fexample.com\"\n```\n\n### Security Notes\n\n⚠️ **Cookies are credentials.** Treat profile directories like passwords:\n- Profile dirs have `chmod 700` (owner only)\n- Cookie exports have `chmod 600`\n- Don't share profiles or exported cookies over insecure channels\n- Consider encrypting backups\n\n### Limitations\n\n| Limitation | Reason |\n|------------|--------|\n| localStorage\u002FsessionStorage not exported | Use browser profile instead (handles automatically) |\n| IndexedDB not portable | Stored in browser profile, not cookie export |\n| No parallel profile access | No file locking in v1; use one process per profile |\n\n## References\n\n- [references\u002Fproxy-setup.md](references\u002Fproxy-setup.md) — Proxy configuration guide\n- [references\u002Ffingerprint-checks.md](references\u002Ffingerprint-checks.md) — What anti-bot systems check\n",{"name":5,"metadata":43,"description":7},{"openclaw":44},{"emoji":45,"requires":46},"?",{"env":47,"bins":48},[],[49],"distrobox","main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fkesslerio\u002Fcamoufox-stealth",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":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add kbarbel640-del\u002Fskills --skill camoufox-stealth",{"tool":63,"command":64},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill camoufox-stealth",{"tool":66,"command":67},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill camoufox-stealth","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002FSKILL.md",true,[71,77,81,85,89,95,99,103],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"_meta.json","REFERENCE","参考文档",295,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002F_meta.json",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"README.md",2709,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002FREADME.md",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Ffingerprint-checks.md",6510,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Freferences\u002Ffingerprint-checks.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fproxy-setup.md",3945,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Freferences\u002Fproxy-setup.md",{"path":90,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":93,"sourceHtmlUrl":94},"scripts\u002Fcamoufox-fetch.py","SCRIPT","脚本",4190,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Fscripts\u002Fcamoufox-fetch.py",{"path":96,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Fcamoufox-session.py",8973,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Fscripts\u002Fcamoufox-session.py",{"path":100,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Fcurl-api.py",5189,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Fscripts\u002Fcurl-api.py",{"path":104,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":105,"sourceHtmlUrl":106},"scripts\u002Fsetup.sh",1294,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fkesslerio\u002Fcamoufox-stealth\u002Fscripts\u002Fsetup.sh",[108,139,163,184,190,210],{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":119,"publishedAt":38},"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",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":150,"publishedAt":38},"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",[145],{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[151,122,152,153,31,154,155,35,37,28,156,157,158,159,160,161,162,127,26],"dilemm ai","arena","analyze","openclaw agent","create","openclaw","design","strategy","headless","compete","submit","matchmaking",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":38},"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",[169],{"categoryNo":170,"categoryName":171,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000021","资料检索与研究",[173,174,175,176,177,178,179,123,180,161,26,181,122,182,183],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":185,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":189,"publishedAt":38},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[188],{"categoryNo":170,"categoryName":171,"taxonomyType":148,"taxonomyTypeDesc":149},[176,175,174,173,183,178,179,123,177,161,26,180,181,122,182],{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":38},"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",[],[197,198,199,200,201,202,203,204,205,206,207,208,209],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":220,"publishedAt":38},"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",[216,217],{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},{"categoryNo":218,"categoryName":219,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000037","律师与法务",[221,222,223,224,123,225,226,50,227,181,228,229,230,231,232,136,233,234,235],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]