反侦测浏览器 Camoufox 从 0 到跑通:反爬检测的完整指南
【免费下载链接】camoufox🦊 Anti-detect browser项目地址: https://gitcode.com/gh_mirrors/ca/camoufox
凌晨两点,爬虫脚本跑了三天,第四天突然全线失效,控制台一片红:页面返回的不是数据,而是一张"请验证您是真人"的验证码。问题往往不在选择器,而在于网站早用 JS 把浏览器的硬件、系统、GPU 信息读走了——也就是浏览器指纹。Camoufox 是一个专为网页抓取和 AI 代理设计的开源反侦测浏览器,它通过指纹注入的方式,让这些检测拿到的是一套自洽的、像真实设备一样的值。
它是什么
Camoufox 是一个对 Firefox 源码打补丁、深度定制的反侦测浏览器,配套一个 Python 启动器:启动时从真实世界流量模型里生成一整套设备指纹,经 C++ 层注入浏览器,再交给 Playwright 驱动,现有的 Playwright 代码基本不用改。
| 做法 | 指纹注入方式 | 代价 |
|---|---|---|
| 在 Playwright 里跑 Puppeteer/CDP 注入 | JS 层改对象,可被原型链检查抓到 | 需要 Chrome 内核 |
| 用 Camoufox | C++ 层改 Firefox 内核,页面读到的直接是改过的值 | 需要单独fetch浏览器构建 |
为什么检测脚本抓不到它
浏览器端一共三层:Python 启动器用 fpgen 生成一套内部自洽的指纹(屏幕、字体、WebGL、时区互相匹配),C++ 补丁把这套配置注入 Firefox 内核,内核按配置返回数据。JS 代码只能读到改过的值,没有注入痕迹可查。
5 分钟装好并跑通第一个请求
先装 Python 库,再拉取浏览器构建和指纹模型:
pip install -U "camoufox[geoip]" camoufox fetch这段做了两件事:装启动器(geoip 扩展用于地理位置匹配),并下载与当前版本配对的浏览器。
最小可运行示例,同步和异步写法都只有几行:
from camoufox.sync_api import Camoufox with Camoufox(headless=True) as browser: page = browser.new_page() page.goto("https://example.com") print(page.title())返回的就是标准 Playwright 对象,new_page、goto、evaluate全都能用,只换启动方式。
核心配置项:
| 参数 | 说明 |
|---|---|
os | 指纹系统,"windows"/"macos"/"linux",默认按真实流量比例随机 |
proxy | 代理配置,Playwright 格式 |
geoip | True时自动把时区、语言、WebRTC IP 对齐到出口 IP |
canvas_noise | 开启后 Canvas/WebGL 回读随机数据,跨系统身份必须开 |
humanize | 人类化鼠标轨迹,数值限制单次移动时长(秒) |
screen | 限制生成的屏幕分辨率,如Screen(max_width=1920, max_height=1080) |
进阶一:代理 IP 和指纹地点对不上怎么办
痛点:指纹说是旧金山,出口 IP 却是法兰克福,这类矛盾本身就是检测点。解法是一个参数:
with Camoufox( proxy={"server": "http://proxy.example.com:8080"}, geoip=True, ) as browser: page = browser.new_page()geoip=True会先查出代理出口 IP,再把时区、语言、地理位置、WebRTC 全部对齐。注意首次使用要先装geoip扩展,它会自动下载 GeoIP 数据库,一周一刷新。
进阶二:一个浏览器并行多个不同身份
痛点:一个进程跑多个"人",每个都要独立指纹。解法是用NewContext,同一个浏览器进程里开多个互不干扰的上下文:
from camoufox.sync_api import Camoufox, NewContext with Camoufox(headless=True, canvas_noise=True) as browser: alice = NewContext(browser, os="windows") bob = NewContext(browser, os="macos") alice.new_page().goto("https://example.com") bob.new_page().goto("https://example.com")每个上下文有独立的 navigator、屏幕、WebGL、字体、时区。注意:上下文跨系统(如 macos 身份跑在 Linux 机器上)时,canvas_noise必须开,否则 Canvas 像素会暴露真实宿主。
踩坑与高频疑问
第一次启动特别慢,是卡住了吗?不是卡死。首次运行会自动下载浏览器构建和指纹模型,camoufox fetch可以提前完成,也省去首启等待。
服务器上要不要开headless=True?看机器。有显示器就默认带窗口;Linux 服务器可选"virtual"(Xvfb 软件渲染),有 GPU 且想渲染真实可信,用"virtual-gpu"。
手改指纹参数比默认值更稳吗?默认更稳。指纹是从真实流量模型生成的,内部各字段互相匹配;手动单改一项容易自相矛盾,反而增加被识别的概率。
没配代理时 IPv6 会不会泄真实位置?会,但浏览器会自己判断:如果机器的 IPv6 归属地和 IPv4 身份不一致,就按纯 IPv4 网络的行为处理,并用LeakWarning告诉你原因。
看到LeakWarning是不是坏了?不是坏,是保护。比如宿主和身份 GPU 对不上时,启动器会开启 LibreWolf 式的画布随机化并提醒你——浏览器读起来像加固过的 Firefox,而不是原版。
延伸阅读
- python/README.md:启动器最完整的手册,启动选项表、代理、多身份、无头模式都在里面,遇到具体报错先查这里。
- docs/HOST-PARITY.md:Linux 上装 Windows 身份为什么不会露馅,讲到
Math.sin精度和键盘行为这种细节。 - browser/patches/:每个文件对应一个 C++ 层补丁,想知道某个检测点怎么关,翻这里。
跑通最小示例后,剩下的就是按场景翻配置表、按需调参数。
【免费下载链接】camoufox🦊 Anti-detect browser项目地址: https://gitcode.com/gh_mirrors/ca/camoufox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考