OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  camoufox-stealth: C++ 级别的反检测防机器人浏览器自动化系统

camoufox-stealth: C++ 级别的反检测防机器人浏览器自动化系统

 
  transfer ·  2026-02-02 14:52:43 · 3 次点击  · 0 条评论  

名称: camoufox-stealth
描述: 使用 Camoufox(定制版 Firefox)在隔离容器中实现 C++ 级别的反机器人浏览器自动化。可绕过 Cloudflare Turnstile、Datadome、Airbnb、Yelp 等防护。优于仅进行 JS 层面修补的 Chrome 方案(如 undetected-chromedriver、puppeteer-stealth)。适用于标准 Playwright/Selenium 被拦截的场景。
元数据:
openclaw:
emoji: "🦊"
requires:
bins: ["distrobox"]
env: []


Camoufox 隐身浏览器 🦊

C++ 级别的反机器人规避方案,使用 Camoufox —— 一个将隐身补丁直接编译进浏览器本身的定制 Firefox 分支,而非通过 JavaScript 后期附加。

为何 Camoufox 优于基于 Chrome 的方案

方案 检测层级 工具
Camoufox (本技能) C++ 编译补丁 浏览器内置的不可检测指纹
undetected-chromedriver JS 运行时补丁 可通过时序分析检测
puppeteer-stealth JS 注入 页面加载后应用补丁 = 可被检测
playwright-stealth JS 注入 存在相同限制

Camoufox 在源代码层面修补 Firefox —— WebGL、Canvas、AudioContext 指纹是真实被伪造的,而非通过 JavaScript 覆盖来掩盖,后者可被反机器人系统检测到。

核心优势

  1. C++ 级别隐身 —— 指纹伪造直接编译进浏览器,而非 JS 层面的临时修补
  2. 容器隔离 —— 在 distrobox 中运行,保持宿主机系统清洁
  3. 双工具策略 —— Camoufox 处理浏览器,curl_cffi 处理纯 API 请求(无浏览器开销)
  4. 基于 Firefox —— 比 Chrome 的指纹特征更少(大多数机器人使用 Chrome)

适用场景

  • 标准 Playwright/Selenium 被拦截
  • 网站显示 Cloudflare 验证或“正在检查您的浏览器”
  • 需要抓取 Airbnb、Yelp 或类似受保护网站
  • puppeteer-stealthundetected-chromedriver 已失效
  • 需要真正的隐身,而非 JS 层面的临时修补

工具选择

工具 层级 最佳适用场景
Camoufox C++ 补丁 所有受保护网站 - Cloudflare、Datadome、Yelp、Airbnb
curl_cffi TLS 指纹伪造 仅 API 端点 - 无需 JS 执行,速度极快

快速开始

所有脚本均在 pybox distrobox 容器中运行以实现隔离。

⚠️ 请明确使用 python3.14 - pybox 容器可能安装了多个 Python 版本,且各自安装了不同的包。

1. 首次设置

# 在 pybox 容器中安装工具(使用 python3.14)
distrobox-enter pybox -- python3.14 -m pip install camoufox curl_cffi

# Camoufox 浏览器会在首次运行时自动下载(约 700MB 的 Firefox 定制版)

2. 抓取受保护页面

浏览器模式 (Camoufox):

distrobox-enter pybox -- python3.14 scripts/camoufox-fetch.py "https://example.com" --headless

仅 API 模式 (curl_cffi):

distrobox-enter pybox -- python3.14 scripts/curl-api.py "https://api.example.com/endpoint"

架构

┌─────────────────────────────────────────────────────────┐
│                     OpenClaw 代理                       │
├─────────────────────────────────────────────────────────┤
│  distrobox-enter pybox -- python3.14 scripts/xxx.py         │
├─────────────────────────────────────────────────────────┤
│                      pybox 容器                         │
│         ┌─────────────┐  ┌─────────────┐               │
│         │  Camoufox   │  │  curl_cffi  │               │
│         │  (Firefox)  │  │  (TLS 伪造) │               │
│         └─────────────┘  └─────────────┘               │
└─────────────────────────────────────────────────────────┘

工具详情

Camoufox

  • 是什么: 内置 C++ 级别隐身补丁的定制 Firefox 构建
  • 优点: 最佳的指纹规避能力,可自动通过 Turnstile 验证
  • 缺点: 约 700MB 下载量,基于 Firefox
  • 最佳适用: 所有受保护网站 - Cloudflare、Datadome、Yelp、Airbnb

curl_cffi

  • 是什么: 具备浏览器 TLS 指纹伪造功能的 Python HTTP 客户端
  • 优点: 无浏览器开销,速度极快
  • 缺点: 无法执行 JS,仅适用于 API 端点
  • 最佳适用: 已知的 API 端点,移动应用逆向工程

关键:代理要求

数据中心 IP(AWS、DigitalOcean 等)在 Airbnb/Yelp 上会立即被封锁

必须使用住宅或移动代理:

# 代理配置示例
proxy = "http://user:pass@residential-proxy.example.com:8080"

查看 references/proxy-setup.md 了解代理配置详情。

行为规避技巧

Airbnb/Yelp 等网站会进行行为分析。为避免检测:

  1. 预热: 不要直接访问目标 URL。先访问首页,滚动,点击浏览。
  2. 鼠标移动: 注入随机鼠标移动(Camoufox 已处理此功能)。
  3. 时间间隔: 添加随机延迟(操作间隔 2-5 秒),而非固定间隔。
  4. 会话粘性: 同一代理 IP 使用 10-30 分钟,不要每次请求都更换。

无头模式警告

⚠️ 旧的 --headless 标志可被检测。可选方案:

  1. 新版无头模式: 使用 headless="new"(Chrome 109+)
  2. Xvfb: 在虚拟显示中运行有头浏览器
  3. 有头模式: 如果条件允许,直接运行有头浏览器(最可靠)
# Xvfb 方案 (Linux)
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
python scripts/camoufox-fetch.py "https://example.com"

故障排除

问题 解决方案
立即显示“访问被拒绝” 使用住宅代理
Cloudflare 验证循环 尝试使用 Camoufox 而非 Nodriver
浏览器在 pybox 中崩溃 安装缺失的依赖:sudo dnf install gtk3 libXt
TLS 指纹被拦截 使用 curl_cffi 并设置 impersonate="chrome120"
出现 Turnstile 复选框 添加鼠标移动,增加等待时间
ModuleNotFoundError: camoufox 使用 python3.14,而非 pythonpython3
greenlet 段错误 (退出码 139) Python 版本不匹配 - 明确使用 python3.14
libstdc++.so.6 错误 NixOS 库路径问题 - 在 pybox 中使用 python3.14

Python 版本问题 (NixOS/pybox)

pybox 容器可能安装了多个 Python 版本,且各自拥有独立的 site-packages:

# 检查哪个 Python 安装了 camoufox
distrobox-enter pybox -- python3.14 -c "import camoufox; print('OK')"

# 错误用法(可能使用了不同的 Python)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py ...

# 正确用法(明确指定版本)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py ...

如果遇到段错误或导入错误,请始终明确使用 python3.14

示例

抓取 Airbnb 房源信息

distrobox-enter pybox -- python3.14 scripts/camoufox-fetch.py \
  "https://www.airbnb.com/rooms/12345" \
  --headless --wait 10 \
  --screenshot airbnb.png

抓取 Yelp 商家信息

distrobox-enter pybox -- python3.14 scripts/camoufox-fetch.py \
  "https://www.yelp.com/biz/some-restaurant" \
  --headless --wait 8 \
  --output yelp.html

使用 TLS 指纹伪造进行 API 抓取

distrobox-enter pybox -- python3.14 scripts/curl-api.py \
  "https://api.yelp.com/v3/businesses/search?term=coffee&location=SF" \
  --headers '{"Authorization": "Bearer xxx"}'

会话管理

持久化会话允许跨运行复用认证状态,无需重复登录。

快速开始

# 1. 交互式登录(打开有头浏览器)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
  --profile airbnb --login "https://www.airbnb.com/account-settings"

# 在浏览器中完成登录,然后按 Enter 键保存会话

# 2. 在无头模式下复用会话
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
  --profile airbnb --headless "https://www.airbnb.com/trips"

# 3. 检查会话状态
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
  --profile airbnb --status "https://www.airbnb.com"

标志说明

标志 描述
--profile NAME 用于会话存储的命名配置文件(必需)
--login 交互式登录模式 - 打开有头浏览器
--headless 在无头模式下使用已保存的会话
--status 检查会话是否有效
--export-cookies FILE 将 Cookie 导出为 JSON 备份
--import-cookies FILE 从 JSON 文件导入 Cookie

存储

  • 位置: ~/.stealth-browser/profiles/<name>/
  • 权限: 目录 700,文件 600
  • 配置文件命名规则: 仅限字母、数字、_-(1-63 个字符)
  • 保存: 所有域的所有 Cookie 均存储在浏览器配置文件中
  • 恢复: 仅使用与目标 URL 域匹配的 Cookie
  • 单点登录 (SSO): 如果被重定向到 Google/认证域,重新认证一次后配置文件会更新

登录墙检测

脚本通过多种信号检测会话是否过期:

  1. HTTP 状态码: 401, 403
  2. URL 模式: /login, /signin, /auth
  3. 标题模式: "login", "sign in" 等
  4. 内容关键词: "captcha", "verify", "authenticate"
  5. 表单检测: 密码输入字段

如果在 --headless 模式下检测到登录墙,您将看到:

🔒 登录墙信号:url-path, password-form

请使用 --login 重新运行以刷新会话。

远程登录 (SSH)

由于 --login 需要可见的浏览器,您需要进行显示转发:

X11 转发 (推荐):

# 使用 X11 转发连接
ssh -X user@server

# 运行登录(浏览器将在您的本地机器上打开)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
  --profile mysite --login "https://example.com"

VNC 替代方案:

# 在服务器上:启动 VNC 会话
vncserver :1

# 在客户端:连接到 VNC
vncviewer server:1

# 在 VNC 会话中:运行登录
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
  --profile mysite --login "https://example.com"

安全须知

⚠️ Cookie 等同于凭证。 请像对待密码一样对待配置文件目录:
- 配置文件目录权限为 chmod 700(仅所有者)
- Cookie 导出文件权限为 chmod 600
- 不要在不安全的渠道共享配置文件或导出的 Cookie
- 考虑对备份进行加密

限制

限制 原因
localStorage/sessionStorage 无法导出 使用浏览器配置文件替代(可自动处理)
IndexedDB 不可移植 存储在浏览器配置文件中,无法通过 Cookie 导出
不支持并行访问同一配置文件 v1 版本无文件锁;每个配置文件使用一个进程

参考文档

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor