invisible_playwright:在引擎层伪装指纹的 Playwright 方案,值得换掉你的 stealth 插件吗
Python 中未检测到的剧作家自动化。打了隐形补丁的 Firefox,在引擎中反检测浏览器指纹,不注入。通过机器人检测。
秒懂
- 它是什么?
- invisible_playwright 通过修补 Firefox 的 C++ 源码来隐藏自动化痕迹,而非在页面里注入 JS。本文拆解它的机制、安装方式、局限,以及与 Camoufox 等替代品的真实差异。
- 适合谁用?
- 如果你正在用 Playwright 做爬虫或自动化,并且被反爬虫识别卡住,invisible_playwright 值得一试,因为它的指纹伪装发生在引擎层,不依赖 JS 注入,理论上更难被检测。但你要先确认三点:第一,你的目标站点是否对 Firefox 有特殊限制,因为项目本身只支持 Firefox,不支持 Chromium;第二,你的运行环境是否在 Windows 或 Linux x86_64/arm64 上,macOS 用户无法使用;第三,你的代理质量是否过关,项目文档明确说 90% 的公共代理已被标记,浏览器再完美也可能被 IP 连累。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是 stealth 插件的根本缺陷
大多数 Playwright 反检测方案是在页面加载后注入 JavaScript 来覆盖 navigator.webdriver 或修改指纹。这种做法有一个致命弱点:注入的代码会在页面运行时留下痕迹,检测脚本只要扫描执行上下文就能发现异常。invisible_playwright 换了一条路,它直接修补 Firefox 的 C++ 源码,把指纹值写进浏览器引擎内部。页面脚本读取 navigator、screen、canvas 这些 API 时,拿到的就是引擎给出的值,没有任何注入层。这意味着从页面视角看,这就是一个普通的 Firefox 浏览器,没有 seam 可读。项目文档用一句话概括:fingerprint is set inside the engine, not injected into the page。这个设计选择让它在原理上比 JS shim 方案更干净,但也带来一个代价,你只能用 Firefox,不能用 Chromium 或 WebKit。
从 Playwright 切换到它只需两行代码
项目的核心卖点是 API 兼容性。你现有的 Playwright 代码不需要重写,只需要替换导入和启动方式。官方 README 给出了 diff 示例:把 from playwright.sync_api import sync_playwright 换成 from invisible_playwright import InvisiblePlaywright,把 with sync_playwright() as p: browser = p.firefox.launch() 换成 with InvisiblePlaywright() as browser。browser 对象就是标准的 playwright.sync_api.Browser,所有方法照常调用。异步版本同样支持,从 invisible_playwright.async_api 导入即可。这个设计降低了迁移成本,但要注意,它只支持 Firefox,如果你的项目依赖 Chromium 特有的功能,比如 Chrome DevTools Protocol 或特定渲染行为,这条路就走不通。
安装和首次下载:238 MB 的一次性成本
安装命令很简单,pip install invisible-playwright,然后运行 python -m invisible_playwright fetch 下载浏览器引擎。这个下载大约 238 MB,解压后约 544 MB,并且有 sha256 校验。项目支持 Windows x86_64 和 Linux x86_64/arm64,macOS 不再支持,文档说得很明确,在 Mac 上启动时会直接拒绝并给出提示,而不是下载一个不存在的二进制。这意味着如果你的开发机是 Mac,但生产环境是 Linux,你需要先在 Linux 上测试。CLI 命令是 invisible-playwright,带连字符,也可以用 python -m invisible_playwright 代替,后者不需要 PATH 配置。安装后可以用 invisible-playwright version 查看 wrapper、core 和引擎的版本。
指纹随机与复现:seed 和 pin 机制
每次启动 InvisiblePlaywright 时,它会生成一个随机 seed,这个 seed 决定了大约 200 个指纹字段的值,包括 GPU、音频、字体、屏幕分辨率等。如果你需要复现一次运行,可以记录 seed 并传入。更精细的控制是 pin 参数,它可以强制指定某些字段,比如 gpu.renderer 或 screen.width,而其他字段仍从 seed 推导。文档提到 pin 与贝叶斯采样器有交互,具体规则在 docs/pinning.md 里有详细说明。这个设计对调试很有用,比如你想固定一个特定 GPU 配置来测试某个站点的反应,但又不想让整个指纹完全一致。不过,pin 的字段越多,指纹的唯一性就越低,反而可能增加被识别的风险,这需要你自己权衡。
代理是最大的变量,文档也没回避
项目文档在安装说明之后直接讨论了一个现实问题:如果浏览器已经伪装得很好,但仍然遇到验证码,问题大概率出在代理 IP 上。文档估计大约 90% 的公共代理都是已知的,因为任何人都可以租用同一个地址,这些 IP 早就被网站列入黑名单。一个完美的浏览器配上已知的 IP 依然会失败。所以项目支持代理配置,格式是标准的 Playwright proxy 字典,支持 socks5、socks4、http、https,并且默认将 DNS 路由通过代理,避免本地 DNS 泄漏。时区也默认从出口 IP 自动推导,如果你设置了代理,就基于代理的 IP。如果你需要强制某个时区,可以显式指定 timezone 参数。这个设计承认了反检测的边界,浏览器只是其中一个变量,网络层同样关键。
已知的局限:平台、浏览器和下载体积
最明显的限制是平台支持。macOS 用户被明确排除在外,项目停止在 firefox-20 版本,没有后续二进制。如果你团队里有 Mac 开发机,要么换系统,要么在 CI 里跑 Linux。其次是浏览器选择,只有 Firefox,没有 Chromium 或 WebKit。这会影响一些依赖 Chromium 的自动化场景,比如某些网站对 Firefox 的支持不佳,或者你需要使用 Chrome 特有的扩展。第三个限制是体积,首次下载 238 MB,解压后 544 MB,对于容器化部署或频繁重建的 CI 环境,这是一个不小的开销。项目没有提供精简选项,你只能接受这个体积。文档也没有提到增量更新机制,每次 fetch 可能都是全量下载。
与 Camoufox、Patchright 的差异:引擎修补 vs 运行时补丁
项目文档的 Comparisons 部分提到了 Camoufox、Patchright、nodriver 和 playwright-stealth。这里只说 Camoufox 和 Patchright,因为它们的路线不同。Camoufox 同样基于 Firefox,也做引擎级修改,但它的重点是在 Firefox 源码中加入反检测功能,并且支持更多指纹随机化选项。invisible_playwright 则是从 Playwright 的角度出发,保持 API 兼容,让你用标准 Playwright 代码驱动这个修补过的 Firefox。Patchright 走的是另一条路,它修补 Playwright 的 CDP 协议,让浏览器认为自动化工具不存在,但它基于 Chromium,不是 Firefox。所以选择哪一个,取决于你更看重哪个浏览器生态。如果你必须用 Chromium,Patchright 是候选;如果你接受 Firefox,invisible_playwright 和 Camoufox 都值得对比,但文档没有给出两者在检测率上的具体数据,你需要自己跑测试。
维护成本:MIT 许可下的持续更新
项目最近一次提交是 2026 年 8 月,v0.7.4 版本,说明维护活跃。MIT 许可意味着你可以自由使用,甚至修改源码,但没有商业支持,出了问题只能靠社区或自己看文档。升级成本在于浏览器引擎的更新,Firefox 本身更新频繁,每次上游版本变化都可能影响补丁的兼容性,你需要关注新版本是否与你的代理、指纹配置兼容。文档提到有 wiki 和 guides,内容涵盖检测原理和常见问题,这能降低排查成本,但你不能指望一个晚上就能掌握所有细节。对于生产环境,建议先在测试站点上验证指纹稳定性,再部署到实际目标。
编辑结论
如果你正在用 Playwright 做爬虫或自动化,并且被反爬虫识别卡住,invisible_playwright 值得一试,因为它的指纹伪装发生在引擎层,不依赖 JS 注入,理论上更难被检测。但你要先确认三点:第一,你的目标站点是否对 Firefox 有特殊限制,因为项目本身只支持 Firefox,不支持 Chromium;第二,你的运行环境是否在 Windows 或 Linux x86_64/arm64 上,macOS 用户无法使用;第三,你的代理质量是否过关,项目文档明确说 90% 的公共代理已被标记,浏览器再完美也可能被 IP 连累。如果你需要 Chromium 或 WebKit,或者不想承担 238 MB 的下载体积,那么 Patchright 或 Camoufox 可能是更合适的选择。invisible_playwright 的核心理念是:把浏览器伪装到极致,然后让 IP 成为唯一变量,这一点在文档里说得非常直白。
社区笔记