
invisible_playwright v0.7.0
免费的反检测浏览器隐身方案,适用于 Playwright:无法被检测的无头 Firefox 指纹。Python 爬取、reCAPTCHA 与机器人检测绕过。开源。
适用于 Playwright 的免费反检测浏览器隐身方案:未检测的 Firefox 指纹,支持无头或有头模式。
Python 网页抓取与验证码绕过。开源,并通过所有机器人检测测试。

工作原理
反机器人机制会提出两个问题,而 reCAPTCHA、hCaptcha 和 Cloudflare Turnstile 会对答案进行评分。invisible_playwright 对两者都回答“是”。
1. 这是真实浏览器吗? 是的。它是 Firefox,在 C++ 源码层面进行了修补。
- 浏览器指纹在引擎内部设置,而非注入页面:navigator、屏幕、GPU/WebGL、canvas、字体、音频、WebRTC、时区、网络。无论无头还是有头模式,值均相同。
- 无 JS shim、无覆盖、无接缝可读取。
2. 是真实用户在使用吗? 是的。操作在驱动层已人性化。
- 每次点击、悬停和拖拽都遵循自然的鼠标路径并带有拟人化时序,光标不会瞬移。
- 每次输入都与真实鼠标逐字节一致:真实输入源、压力、可信事件。
由标准 Playwright API 驱动。完整解析:feder-cr/firefox_antidetect_patch。
仍然遇到验证码或反机器人机制?问题出在代理上。
一旦浏览器被处理妥当,它就不再是变量。如果你仍被挑战,关键已不在浏览器,而在于你来自的 IP。约 90% 的代理是公共的:任何人都能租用同一地址,因此它已被知晓并出现在网站检查的封禁 IP 列表中。一个完美的浏览器配上已知 IP 仍然会失败。
安装
pip install invisible-playwright
python -m invisible_playwright fetch # 一次性约 238 MB 下载(解压后约 544 MB),sha256 校验
支持的平台:Windows x86_64、Linux x86_64 / arm64。macOS 不再受支持(版本止步于 firefox-20);在 Mac 上,包会在启动时以明确消息拒绝运行,而非下载已不存在的二进制文件。
用法
每次会话随机指纹
100% Playwright 兼容 - 同步与异步、所有方法、零 API 变更。如果你已在用 Playwright,切换只需两行:
- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
- browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:
每次会话都会获得不同的指纹(GPU、音频、字体、屏幕、约 200 个字段)以及贝塞尔曲线鼠标移动。
同步
from invisible_playwright import InvisiblePlaywright
with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = browser.new_page()
page.goto("https://example.com")
page.click("#submit") # 鼠标沿贝塞尔曲线弧线移动到按钮
异步
from invisible_playwright.async_api import InvisiblePlaywright
async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
await page.click("#submit")
browser 对象是 playwright.sync_api.Browser / playwright.async_api.Browser - 所有 Playwright 方法均可直接使用。
记录种子以重放运行:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
可复现指纹
with InvisiblePlaywright(seed=42) as browser:
... # 每次运行相同的 GPU、相同的 canvas 哈希、相同的音频上下文
代理
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
支持的协议:socks5、socks4、http、https。DNS 默认通过代理路由,无本地泄漏。
时区
浏览器时区跟随 timezone=:
# 默认:时区根据出口 IP 自动推导(若设置代理则用代理出口,否则用主机自身公网 IP)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# 显式 IANA 时区始终优先,是强制特定时区的唯一方式
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
固定特定指纹字段
默认情况下所有内容均来自 seed。要强制特定值而其余保持由 seed 推导:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
"gpu.vendor": "Google Inc. (NVIDIA)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
可固定键的完整列表、固定如何与贝叶斯采样器交互以及常见模式,请参阅 docs/pinning.md。
CLI
安装的命令是 invisible-playwright,带连字符。python -m invisible_playwright 工作方式完全相同,且无需在 PATH 中配置。
invisible-playwright fetch # 若缺失则下载引擎,对照封条校验每个缓存项,
# 打印路径
invisible-playwright version # wrapper、核心和引擎版本,以及引擎缓存位置
文档、指南与对比
所有内容在 wiki 中阅读体验更佳且可搜索,分为四个部分而非单一平铺列表:
- 文档 - 安装、从普通 Playwright 的两行切换、代理/时区 配置、固定特定字段、CLI。
- 指南 - 检测 实际如何运作,分为七组:浏览器身份、canvas/WebGL/字体/ 音频、网络与 WebRTC、自动化层、AI 代理、检测器本身 的源码解析,以及测试。
- 对比 - 与 Camoufox、Patchright、nodriver 和 playwright-stealth 的对比,以及 总体上 Firefox 优于 Chromium 的理由。
- 集成 - Scrapy、Crawlee、Robot Framework、CodeceptJS、测试运行器、Playwright MCP,以及 按名称列出其不适配的框架。
如果不知从何入手:让 Playwright 不被检测的三种方式 是大多数其他页面回链的地图,Playwright 在某站点被检测为机器人 是故障排查顺序,navigator.webdriver 并非你想的那个破绽 解释了该领域最著名的属性以及为何仅修补它几乎 毫无用处。
- crawl4ai 隐身与自定义浏览器引擎 - browser_type 接受 firefox 但没有 executable_path;适配器接缝在哪里
- 为何无头浏览器渲染不同字体 - 三个原因、各平台字体集,以及为何修复不是安装更多字体
- 如何让 Linux 和 macOS 报告真实 Windows 字体 - 一个清单、三个被说服不询问主机的字体后端,以及仍敞开的四个接缝
- measureText 与 TextMetrics 作为指纹采集面 - 一次调用产生十余个数字且无需权限提示,以及我们修复时犯的两个错误
- privacy.resistFingerprinting 实际做了什么 - 以及为何本项目有意将其设为 false
- ChromeDriver cdc_ 变量 - 为何重命名不等于移除,以及这推广到何种层面
- bot.sannysoft.com 实际检查什么 - 逐行解析,以及无人阅读的 canvas-in-iframe 测试
- CreepJS 如何判定你在撒谎 - 四种检测技术,以及为何阻止探测本身也会被记录
- 静默无效的 Firefox 偏好设置 - 五个原因,从让我们付出真实 bug 代价的那个说起
- BotD 实际检测什么 - 二十个检测器,以及为何大多数与机器人无关
- 为何 FingerprintJS 访客 ID 会变化 - 它是 41 个组件的哈希,一个变动则全部变动
相关项目
开源邻居项目,以及各自的用途。
Firefox 侧
- Camoufox - 一款同样在 C++ 层面修补的反检测 Firefox。它覆盖更广的表面并自带指纹数据库;本项目通过贝叶斯采样器从种子推导指纹,因此一个数字即可复现一台机器。完整对比。
- LibreWolf - 带隐私默认设置的 Firefox 分支。它提供配置好的二进制供用户浏览;本项目提供源码补丁加自动化封装。
- arkenfox/user.js - 通过偏好设置加固 Firefox。凡偏好设置足够之处就用它;本项目在偏好设置不足之处修补 C++。
Chromium 侧
- Patchright - 修补版 Playwright 分支,因此隐身工作落在驱动层而非浏览器二进制中。完整对比。
- nodriver -
undetected-chromedriver的继任者,直接通过 CDP 驱动 Chrome 并移除 WebDriver 风格的特征。完整对比。 - playwright-stealth - 在页面加载前应用的 init-script 补丁。其维护者本人称之为概念验证;完整对比。
- puppeteer-extra-plugin-stealth - 这一 init-script 谱系的鼻祖,仍被广泛推荐。其仓库最后一次实质性提交在 2024 年中;这在实践中意味着什么。
- selenium-stealth - 在 Selenium/CDP 上的相同方法。其仓库最后一次提交在 2021 年 12 月;这在实践中意味着什么。
- pyppeteer - Puppeteer 的非官方 Python 移植。其 README 自称已停止维护并指向
playwright-python;该推荐实际在说什么。 - rebrowser-patches - 修复 Chromium 上的
Runtime.enableCDP 泄漏,独立收敛到与 Patchright 所用几乎相同的修复。完整对比。 - fingerprint-suite - 用贝叶斯网络生成连贯指纹,接近本项目自身的生成方法,然后将其注入 Chromium 或 Firefox 上的 Playwright 或 Puppeteer 页面。完整对比。
- playwright-with-fingerprints - 注入来自远程付费服务的指纹值,仅限 Windows,锁定特定 Chromium 构建。完整对比。
选择哪个取决于你的问题所在层级,以及你需要 Firefox 还是 Chromium。让 Playwright 不被检测的三种方式 详细分析了各层能触及与不能触及的范围,包括本项目的代价。
如果你是在引擎而非工具间做选择,请注意大量 AI 代理框架通过 CDP 驱动 Chromium,这替你做了决定:AI 浏览器代理与隐身。
许可证
MIT - 见 LICENSE。修补版 Firefox 二进制按 MPL-2.0(Firefox 上游许可证)分发。生成该二进制的针对 mozilla-central 的 C++ 补丁位于 feder-cr/firefox_antidetect_patch。
免责声明
本项目仅供教育目的。按现状提供,不附带任何担保。我对其使用方式不承担任何责任。请自行承担风险使用,并遵守您所在司法辖区的法律。
由 Federico Elia 构建