名称: stealth-browser
描述: 终极隐身浏览器自动化工具,具备反检测、Cloudflare 绕过、验证码破解、持久会话和静默操作功能。适用于任何需要规避机器人检测、保持登录状态、无头浏览或绕过安全措施的网页自动化任务。触发词包括:"bypass cloudflare"、"solve captcha"、"stealth browse"、"silent automation"、"persistent login"、"anti-detection" 或任何需要不可检测的浏览器自动化的任务。当用户要求"登录 X 网站"时,自动使用显示模式登录,然后保存会话以供未来无头模式复用。
结合多层反检测技术的静默、不可检测的网页自动化工具。
当用户要求登录任何网站时:
python scripts/stealth_session.py -u "https://target.com/login" -s sitename --headed
用户在可见浏览器中手动登录
登录确认后保存会话:
python scripts/stealth_session.py -u "https://target.com" -s sitename --headed --save
python scripts/stealth_session.py -u "https://target.com" -s sitename --load
会话存储在:~/.clawdbot/browser-sessions/<sitename>.json
长任务使用 task_runner.py 管理状态:
from task_runner import TaskRunner
task = TaskRunner('my_task')
task.set_total(100)
for i in items:
if task.is_completed(i):
continue # 跳过已完成
# 处理...
task.mark_completed(i)
task.finish()
所有登录尝试记录在:~/.clawdbot/browser-sessions/attempts.json
┌─────────────────────────────────────────────────────┐
│ 隐身浏览器 │
├─────────────────────────────────────────────────────┤
│ 第一层:反检测引擎 │
│ - puppeteer-extra-plugin-stealth │
│ - 浏览器指纹欺骗 │
│ - WebGL/Canvas/Audio 指纹掩码 │
├─────────────────────────────────────────────────────┤
│ 第二层:挑战绕过 │
│ - Cloudflare Turnstile/JS 挑战 │
│ - hCaptcha / reCAPTCHA 集成 │
│ - 2Captcha / Anti-Captcha API │
├─────────────────────────────────────────────────────┤
│ 第三层:会话持久化 │
│ - Cookie 存储 (JSON/SQLite) │
│ - localStorage 同步 │
│ - 多配置文件管理 │
├─────────────────────────────────────────────────────┤
│ 第四层:代理与身份 │
│ - 轮换住宅代理 │
│ - User-Agent 轮换 │
│ - 时区/区域设置欺骗 │
└─────────────────────────────────────────────────────┘
npm install -g puppeteer-extra puppeteer-extra-plugin-stealth
npm install -g playwright
pip install undetected-chromedriver DrissionPage
将 API 密钥存储在 ~/.clawdbot/secrets/captcha.json:
{
"2captcha": "YOUR_2CAPTCHA_KEY",
"anticaptcha": "YOUR_ANTICAPTCHA_KEY",
"capsolver": "YOUR_CAPSOLVER_KEY"
}
存储在 ~/.clawdbot/secrets/proxies.json:
{
"rotating": "http://user:pass@proxy.provider.com:port",
"residential": ["socks5://ip1:port", "socks5://ip2:port"],
"datacenter": "http://dc-proxy:port"
}
# scripts/stealth_session.py - 用于最大兼容性
import undetected_chromedriver as uc
from DrissionPage import ChromiumPage
# 选项 A:undetected-chromedriver(基于 Selenium)
driver = uc.Chrome(headless=True, use_subprocess=True)
driver.get("https://nowsecure.nl") # 测试反检测
# 选项 B:DrissionPage(更快,原生 Python)
page = ChromiumPage()
page.get("https://cloudflare-protected-site.com")
// scripts/stealth.mjs
import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: 'new',
args: [
'--disable-blink-features=AutomationControlled',
'--disable-dev-shm-usage',
'--no-sandbox'
]
});
const page = await browser.newPage();
await page.goto('https://bot.sannysoft.com'); // 验证隐身效果
# 使用带有隐身配置文件的 agent-browser
agent-browser --profile ~/.stealth-profile open https://target.com
# 或通过脚本
python scripts/stealth_open.py --url "https://target.com" --headless
# 使用 DrissionPage 自动绕过 CF
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("https://cloudflare-site.com")
# DrissionPage 会自动等待 CF 挑战
# 如果需要,手动等待
page.wait.ele_displayed("main-content", timeout=30)
对于顽固的 Cloudflare 站点,使用 FlareSolverr:
# 启动 FlareSolverr 容器
docker run -d --name flaresolverr -p 8191:8191 ghcr.io/flaresolverr/flaresolverr
# 请求清理
curl -X POST http://localhost:8191/v1 \
-H "Content-Type: application/json" \
-d '{"cmd":"request.get","url":"https://cf-protected.com","maxTimeout":60000}'
# scripts/solve_captcha.py
import requests
import json
import time
def solve_recaptcha(site_key, page_url, api_key):
"""通过 2Captcha 破解 reCAPTCHA v2/v3"""
# 提交任务
resp = requests.post("http://2captcha.com/in.php", data={
"key": api_key,
"method": "userrecaptcha",
"googlekey": site_key,
"pageurl": page_url,
"json": 1
}).json()
task_id = resp["request"]
# 轮询结果
for _ in range(60):
time.sleep(3)
result = requests.get(f"http://2captcha.com/res.php?key={api_key}&action=get&id={task_id}&json=1").json()
if result["status"] == 1:
return result["request"] # Token
return None
def solve_hcaptcha(site_key, page_url, api_key):
"""通过 Anti-Captcha 破解 hCaptcha"""
resp = requests.post("https://api.anti-captcha.com/createTask", json={
"clientKey": api_key,
"task": {
"type": "HCaptchaTaskProxyless",
"websiteURL": page_url,
"websiteKey": site_key
}
}).json()
task_id = resp["taskId"]
for _ in range(60):
time.sleep(3)
result = requests.post("https://api.anti-captcha.com/getTaskResult", json={
"clientKey": api_key,
"taskId": task_id
}).json()
if result["status"] == "ready":
return result["solution"]["gRecaptchaResponse"]
return None
# scripts/session_manager.py
import json
import os
from pathlib import Path
SESSIONS_DIR = Path.home() / ".clawdbot" / "browser-sessions"
SESSIONS_DIR.mkdir(parents=True, exist_ok=True)
def save_cookies(driver, session_name):
"""保存 Cookie 到 JSON"""
cookies = driver.get_cookies()
path = SESSIONS_DIR / f"{session_name}_cookies.json"
path.write_text(json.dumps(cookies, indent=2))
return path
def load_cookies(driver, session_name):
"""从保存的会话加载 Cookie"""
path = SESSIONS_DIR / f"{session_name}_cookies.json"
if path.exists():
cookies = json.loads(path.read_text())
for cookie in cookies:
driver.add_cookie(cookie)
return True
return False
def save_local_storage(page, session_name):
"""保存 localStorage"""
ls = page.evaluate("() => JSON.stringify(localStorage)")
path = SESSIONS_DIR / f"{session_name}_localStorage.json"
path.write_text(ls)
return path
def load_local_storage(page, session_name):
"""恢复 localStorage"""
path = SESSIONS_DIR / f"{session_name}_localStorage.json"
if path.exists():
data = path.read_text()
page.evaluate(f"(data) => {{ Object.entries(JSON.parse(data)).forEach(([k,v]) => localStorage.setItem(k,v)) }}", data)
return True
return False
# 完整的静默自动化示例
from DrissionPage import ChromiumPage, ChromiumOptions
# 配置隐身
options = ChromiumOptions()
options.headless()
options.set_argument('--disable-blink-features=AutomationControlled')
options.set_argument('--disable-dev-shm-usage')
options.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
page = ChromiumPage(options)
# 导航并绕过 CF
page.get("https://target-site.com")
# 等待任何挑战
page.wait.doc_loaded()
# 静默交互
page.ele("@id=username").input("user@email.com")
page.ele("@id=password").input("password123")
page.ele("@type=submit").click()
# 保存会话以供复用
page.cookies.save("~/.clawdbot/browser-sessions/target-site.json")
# scripts/proxy_rotate.py
import random
import json
from pathlib import Path
def get_proxy():
"""从池中获取随机代理"""
config = json.loads((Path.home() / ".clawdbot/secrets/proxies.json").read_text())
proxies = config.get("residential", [])
return random.choice(proxies) if proxies else config.get("rotating")
# 与 DrissionPage 一起使用
options = ChromiumOptions()
options.set_proxy(get_proxy())
page = ChromiumPage(options)
要完成此技能,请提供:
验证码 API 密钥(可选但推荐):
代理配置(可选):
目标站点(用于预配置会话):
stealth-browser/
├── SKILL.md
├── scripts/
│ ├── stealth_session.py # 主隐身浏览器包装器
│ ├── solve_captcha.py # 验证码破解工具
│ ├── session_manager.py # Cookie/localStorage 持久化
│ ├── proxy_rotate.py # 代理轮换
│ └── cf_bypass.py # Cloudflare 特定绕过
└── references/
├── fingerprints.md # 浏览器指纹详情
└── detection-tests.md # 测试反检测的站点
# 运行以下命令验证隐身是否有效:
python scripts/stealth_open.py --url "https://bot.sannysoft.com"
python scripts/stealth_open.py --url "https://nowsecure.nl"
python scripts/stealth_open.py --url "https://arh.antoinevastel.com/bots/areyouheadless"
python scripts/stealth_open.py --url "https://pixelscan.net"
对于简单任务,使用带有持久配置文件的 agent-browser:
# 创建一次隐身配置文件
agent-browser --profile ~/.stealth-profile --headed open https://login-site.com
# 手动登录,然后关闭
# 复用已认证的会话(无头模式)
agent-browser --profile ~/.stealth-profile snapshot
agent-browser --profile ~/.stealth-profile click @e5
对于 Cloudflare 或验证码繁重的站点,请改用 Python 脚本。
headless: true(更不易检测)