Camoufox Stealth Browser技能使用说明
Camoufox 隐身浏览器 🦊
C++ 级别使用 Camoufox 进行反机器人规避——这是一个自定义的 Firefox 分支,其隐身补丁直接编译到浏览器本身,而不是通过 JavaScript 后期附加。
为何 Camoufox 优于基于 Chrome 的解决方案
| 方法 | 检测级别 | 工具 |
|---|---|---|
| Camoufox(此项技能) | C++ 编译的补丁 | 无法检测的指纹内置于浏览器中 |
| undetected-chromedriver | JS 运行时补丁 | 可通过时序分析检测到 |
| puppeteer-stealth | JS 注入 | 补丁在页面加载后应用 = 可检测 |
| playwright-stealth | JS 注入 | 相同的局限性 |
Camoufox 在源代码级别修补 Firefox— WebGL、Canvas、AudioContext指纹是真正被伪造的,而非通过JavaScript覆盖进行屏蔽,后者可被反爬虫系统检测到。

核心优势
- C++级隐身— 指纹伪造功能编译进浏览器,而非使用JS技巧
- 容器隔离— 在distrobox中运行,保持您的主机系统纯净
- 双工具策略— Camoufox用于浏览器,curl_cffi用于纯API场景(无浏览器开销)
- 基于Firefox— 比Chrome更难被识别(多数机器人程序都使用Chrome)
适用场景
- 标准Playwright/Selenium被拦截时
- 网站显示Cloudflare验证或“正在检查您的浏览器”时
- 需要爬取Airbnb、Yelp等受保护网站时
当puppeteer-stealth或undetected-chromedriver失效时- 您需要的是真正的隐蔽性,而非JS补丁
工具选择
| 工具 | 层级 | 最佳适用场景 |
|---|---|---|
| Camoufox | C++补丁 | 所有受保护站点 - Cloudflare, Datadome, Yelp, Airbnb |
| curl_cffi | TLS欺骗 | 仅限API端点 - 无需JS,速度极快 |
快速开始
所有脚本运行于pyboxdistrobox以实现隔离。
⚠️请使用python3.14明确指定- pybox可能安装了多个Python版本,且各版本安装的包可能不同。
1. 设置(首次使用)
# Install tools in pybox (use python3.14)
distrobox-enter pybox -- python3.14 -m pip install camoufox curl_cffi
# Camoufox browser downloads automatically on first run (~700MB Firefox fork)
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 Agent │
├─────────────────────────────────────────────────────────┤
│ distrobox-enter pybox -- python3.14 scripts/xxx.py │
├─────────────────────────────────────────────────────────┤
│ pybox Container │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Camoufox │ │ curl_cffi │ │
│ │ (Firefox) │ │ (TLS spoof)│ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
工具详情
Camoufox
- 是什么:包含C++级别隐身补丁的自定义Firefox构建版本
- 优点:最佳指纹规避能力,可自动通过Turnstile验证
- 缺点:约700MB下载大小,基于Firefox
- 最适合:所有受保护网站 - Cloudflare、Datadome、Yelp、Airbnb
curl_cffi
- 是什么:具备浏览器TLS指纹伪装功能的Python HTTP客户端
- 优点:无浏览器开销,速度极快
- 缺点:无法执行JavaScript,仅适用于API端点
- 最适合:已知API端点、移动应用逆向工程
重要:代理要求
数据中心IP(AWS、DigitalOcean)在Airbnb/Yelp上会=立即被屏蔽
您必须使用住宅或移动代理:
# Example proxy config
proxy = "http://user:pass@residential-proxy.example.com:8080"
请参阅references/proxy-setup.md了解代理配置。
行为提示
像Airbnb/Yelp这样的网站会进行行为分析。为了避免被检测到:
- 预热:不要直接访问目标URL。先访问主页,滚动页面,四处点击。
- 鼠标移动:注入随机的鼠标移动(Camoufox会处理这个)。
- 时间间隔:添加随机延迟(操作之间间隔2-5秒),不要使用固定的时间间隔。
- 会话粘性:在10-30分钟的会话中使用相同的代理IP,不要每个请求都更换。
无头模式警告
⚠️ 旧的--headless标志会被检测到。可选方案:
- 新无头模式:使用
headless="new"(Chrome 109+版本) - Xvfb:在虚拟显示中运行有头浏览器
- 有头模式:如果可以,请直接运行有头模式(最可靠)
# Xvfb approach (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而非python或者python3 |
greenlet段错误(退出代码 139) | Python 版本不匹配 - 请明确使用python3.14明确指定 |
libstdc++.so.6错误 | NixOS 库路径问题 - 请在 pybox 中使用python3.14在 pybox 中 |
Python 版本问题(NixOS/pybox)
该pybox容器可能包含多个具有独立 site-packages 的 Python 版本:
# Check which Python has camoufox
distrobox-enter pybox -- python3.14 -c "import camoufox; print('OK')"
# Wrong (may use different Python)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py ...
# Correct (explicit version)
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. Login interactively (headed browser opens)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
--profile airbnb --login "https://www.airbnb.com/account-settings"
# Complete login in browser, then press Enter to save session
# 2. Reuse session in headless mode
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
--profile airbnb --headless "https://www.airbnb.com/trips"
# 3. Check session status
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
--profile airbnb --status "https://www.airbnb.com"
标志参数
| 参数 | 说明 |
|---|---|
--profile 名称 | 会话存储的命名配置文件(必需) |
--login | 交互式登录模式 - 开启带界面浏览器 |
--headless | 在无头模式下使用已保存会话 |
--status | 检查会话是否有效 |
--export-cookies 文件 | 将Cookie导出为JSON文件备份 |
--import-cookies 文件 | 从JSON文件导入Cookie |
存储
- 存储位置:
~/.stealth-browser/profiles/<名称>/ - 权限设置:目录
700文件600 - 配置文件名称:字母、数字、
_,-仅限(1-63个字符)
Cookie 处理
- 保存:浏览器配置文件中存储的所有域的所有 Cookie
- 恢复:仅使用与目标 URL 域匹配的 Cookie
- 单点登录:如果被重定向到 Google/认证域,则重新认证一次并更新配置文件
登录墙检测
脚本使用多种信号检测会话过期:
- HTTP 状态:401、403
- URL 模式:
/login,/signin,/auth - 标题模式:"登录"、"登录"等。
- 内容关键词:"验证码"、"验证"、"身份验证"
- 表单检测:密码输入字段
如果在--headless模式下检测到,您将看到:
🔒 Login wall signals: url-path, password-form
使用--login重新运行以刷新会话。
远程登录(SSH)
由于--login需要一个可见的浏览器,您需要显示转发:
X11 转发(首选):
# Connect with X11 forwarding
ssh -X user@server
# Run login (opens browser on your local machine)
distrobox-enter pybox -- python3.14 scripts/camoufox-session.py \
--profile mysite --login "https://example.com"
VNC 替代方案:
# On server: start VNC session
vncserver :1
# On client: connect to VNC
vncviewer server:1
# In VNC session: run login
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 版本无文件锁定功能;请每个配置文件使用单一进程 |
参考文档
- references/proxy-setup.md— 代理配置指南
- references/fingerprint-checks.md— 反机器人系统检测内容详解


微信扫一扫,打赏作者吧~