评测 · 测试方法
我们怎样测试指纹浏览器
我们在 2026-10-28、出任何结果之前就定好了测试方法。每个产品都在同一台电脑上、用同样的规则和默认设置测试。本页列出每条规则、每个剔除的检测项和每一处偏差,方便你核对每一个分数。
一句话回答
每款浏览器最多得 100 分,分七个部分:真实反爬检测(35)、环境防关联(20)、无异常值(15)、内核新旧(10)、公开检测网站(10)、速度与内存(5)、价格与开源(5)。每个产品在同一台 Linux 服务器上运行两个环境,各用一个全新的美国 ISP 代理,并在同一 IP 上用原版 Chrome 做对照。AliasMode 是我们开发的,它也按同样的规则打分。
计分规则
| 部分 | 分值 | 规则 |
|---|---|---|
| 真实反爬检测 | 35 | Cloudflare:14 × 通过页数 / 3。reCAPTCHA v3:11.2 × (得分 − 0.1) / 0.8,取值 0 到 11.2。Fingerprint Pro:没有机器人标记得 4.2 分,没有篡改标记得 2.8 分,没有虚拟机标记得 2.8 分。 |
| 环境防关联 | 20 | 20 × 两个环境之间不同的哈希信号数 / 7 |
| 无异常值 | 15 | 15 × (1 − 异常值个数 / 10),最低 0 分 |
| 内核新旧 | 10 | 10 − 2.5 × 落后稳定版的主版本数,最低 0 分。Chromium 内核对照测试当天的 Chrome 稳定版(156),Firefox 内核对照 Firefox 稳定版(159)。如果 User-Agent 声称的版本比内核新,以内核版本为准。 |
| 公开检测网站 | 10 | CreepJS、BrowserScan 和 Pixelscan 各占 10/3 分。CreepJS:没有伪装项(lies),也没有 headless 或 stealth 标记,得满分;有 1 到 2 处伪装得一半;否则 0 分。BrowserScan:满分 × 真实度百分比。Pixelscan:判定为一致且没有发现伪装,得满分;有一个问题得一半;否则 0 分。 |
| 速度与内存 | 5 | 2.5 × 最快启动时间 / 本次启动时间,加 2.5 × 最低内存 / 本次内存 |
| 价格与开源 | 5 | 免费版可建 10 个或更多环境得 2 分,3 到 9 个得 1 分。桌面端开源得 1 分。内核开源得 1 分。最便宜的付费套餐每月不超过 $10,或无需付费,得 1 分。 |
原计划给 DataDome 10 分、Cloudflare 10 分、reCAPTCHA v3 8 分、Fingerprint Pro 7 分(3、2、2)。DataDome 因下文所述原因被剔除,其他三项按 1.4 倍放大,总分仍为 35 分。
分级
| 等级 | 总分 |
|---|---|
| S | 85 分及以上 |
| A | 70–84.9 分 |
| B | 55–69.9 分 |
| C | 40–54.9 分 |
| D | 低于 40 分 |
测试电脑与环境
- 一台 Linux x86_64 服务器,16 核、31 GB 内存,没有 GPU。显示器是虚拟 X 显示器(Xvfb)。所有产品使用同一台主机。
- 只用免费版或免费试用,不付款。只有付费套餐的产品记为未测试,没有 Linux 桌面版的产品也一样。
- 指纹设置:Windows、产品提供的最新浏览器版本、美国英语。时区、地理位置和 WebRTC 保持产品默认值,通常是“基于 IP”。其他设置全部保持默认,不做调优。
- 每个产品两个环境,A 和 B,因为最小的免费版允许建两个。
- 我们记录了每个产品的应用版本和内核版本,并在应用允许时关闭了自动更新。
- AppImage 文件先解包再运行,因为这台主机无法挂载 AppImage。
用原版 Chrome 做对照
测试每个产品之前,先用未做任何修改的 Linux 版原版 Google Chrome,在该产品的 IP 上运行全部真实反爬检测。如果对照组没通过某项检测,就更换一次 IP。如果对照组再次失败,这项检测就对该产品作废,分值分摊到其他真实检测上。
使用最终 IP 时,原版 Chrome 对每个产品都通过了第一个 Cloudflare 页面,reCAPTCHA v3 得分 0.9,Fingerprint Pro 没有任何标记。所以产品身上的标记来自产品本身,而不是它的 IP。
代理与测试间隔
- 每个产品各用一个全新的美国 ISP 代理,来自同一家服务商。同一产品的两个环境共用这个 IP。
- 同一个 IP 上两次加载 DataDome 页面,至少间隔 5 分钟。
- 第一个 Cloudflare 页面会写入有效期一年的放行 Cookie。所以第二、三次 Cloudflare 测试改用其他域名上的两个验证页面,所有环境都没访问过这些页面。
浏览器如何启动和操作
- 每个环境都按产品自身应用的方式启动。
- 每个页面都通过操作系统的键盘输入敲入网址打开。对应用管理的浏览器,我们没有接入任何 CDP 或 Playwright 会话。
- Camoufox 和 CloakBrowser 是库,所以通过它们自己文档里的 API 启动,这也是它们唯一的常规用法。
- AliasMode 环境通过 AliasMode 应用自带的启动器启动。
- 我们从未点击 Cloudflare 复选框。
- 证据:每个判定都有截图,页面文字用键盘复制(Ctrl+A、Ctrl+C),保存探测数据,并为每次测试录屏。
检测项
| 检测 | 页面 | 计分标准 |
|---|---|---|
| Cloudflare 托管质询 | scrapingcourse.com、zerocaptcha.io、capskip.com | 30 秒内无需点击即放行。第 1 页在环境 A 中运行,第 2、3 页在两个环境中各运行一页。 |
| reCAPTCHA v3 | antcpt.com 得分检测页 | 页面显示的得分 |
| Fingerprint Pro | Fingerprint 公开演示页(playground) | Bot、Browser Tampering 和 Virtual Machine 三项智能信号 |
| CreepJS | CreepJS 公开页面 | 伪装项(lies),以及 headless 和 stealth 百分比 |
| BrowserScan | browserscan.net | 指纹真实度百分比 |
| Pixelscan | pixelscan.net | 一致性判定和伪装检测 |
| 本地探测页 | 我们自己的页面,部署在测试电脑上 | 7 项哈希信号、15 项异常值检查,以及 User-Agent 和内核版本 |
7 项哈希信号
探测页在同一产品的环境 A 和环境 B 中,分别对以下信号计算哈希。两个哈希不同才算一项。两个环境中都为空的值算作相同。
- Canvas 2D 图像
- WebGL 图像回读
- 音频(离线渲染)
- 文本度量(Text metrics)
- DOMRect 和表情符号尺寸
- 字体列表
- 语音合成声音
15 项异常值
每个值只计一次。Chromium 内核对照 Windows 上的原版 Chrome,Firefox 内核对照 Windows 上的原版 Firefox。
- navigator.platform 不是 Win32。
- User-Agent Client Hints 没有显示 Windows,或平台版本不可能成立。
- User-Agent、Client Hints 版本和真实内核版本互相矛盾。
- userAgentData 缺失,或品牌列表格式错误(Chromium 内核)。
- 缺少 Windows 核心字体,或能看到 Linux 独有字体。
- WebGL 渲染器不是 Windows ANGLE 或 Direct3D 字符串,或暴露了软件渲染器(SwiftShader 或 llvmpipe)。
- 时区和代理 IP 所在时区不同。
- navigator.languages 和 Accept-Language 请求头不一致。
- WebRTC 暴露了不是代理 IP 的公网 IP。
- 语音合成声音不是 Windows 声音。
- 屏幕参数不可能成立:可用尺寸大于屏幕,或偏移量、像素比异常。
- hardwareConcurrency 或 deviceMemory 的取值不可能成立。
- navigator.webdriver 为 true,或能看到自动化痕迹。
- 被修改过的函数没通过原生代码检测(toString 或原型链伪装)。
- Windows 上的原版 Chrome 或 Firefox 绝不会出现的其他任何值,附证据记录。
速度与内存
启动时间从启动命令开始计算,到探测页完全加载为止。内存是启动 60 秒后、只开一个探测标签页时,浏览器进程树的比例集大小(PSS)总和。每个产品先预热启动一次,再正式测量 3 次,页面上显示 3 次的中位数。
剔除的检测项
- DataDome(GitHub 注册页):原版 Chrome 在我们试过的每个 IP 上都被拦截,共 12 个。说明主机或其 IP 段已被标记,这项检测无法区分浏览器。它的 10 分分给了其他真实检测。
- iphey:在这台主机上,连原版 Chrome 都没有得到判定。它的分值分给了 CreepJS、BrowserScan 和 Pixelscan。
- Pixelscan 经常停在“scanning”或“Collecting Data”,原版 Chrome 也一样。只有页面实际显示的判定才得分。
与原计划的所有偏差
- Cloudflare 改为按 3 个页面计分,而不是只试 1 次。这项修改在 2026-10-29、出结果之后做出,适用于所有浏览器。只试一次的结果太随机:同一页面 15 秒后重试,结果就可能变化。每个新页面在使用前,原版 Chrome 都在其中一个测试 IP 上通过了。
- Cloudflare 第 3 页,Dolphin Anty 和 Octo Browser:我们的测试脚本为复制页面文字而点击页面,在读到通过文字之前打开了页面上的一个链接。我们在同一环境中重试一次,结果通过。该环境可能已经持有放行凭证,所以这两次通过照常计分,并在笔记中做了标记。
- CreepJS 伪装项按保存下来的页面统计,所有浏览器方法相同。
- 时区:各地理位置数据库对这些 IP 的判断不一致(得克萨斯或密歇根)。时区只要和 ipinfo、ip-api 或 BrowserScan 显示的 IP 时区之一一致,就算正确。
- 这台主机屏蔽了 Chrome 沙箱,而我们没有 root 权限,所以每个 Chromium 浏览器都以 --no-sandbox 运行。由此出现的警告栏不计为异常值。
- CloakBrowser (free 146) 和 MoreLogin Chrome 更换过一次 IP,因为原版 Chrome 在它们的第一个 IP 上没通过 Cloudflare。
- Octo Browser 没有免费版,所以使用免费 2 天试用(代码 TRIAL,无需付款)。GoLogin 使用免费 7 天试用。
- Octo Browser 应用会清空主机的库路径,所以我们给它的内核加了一个小包装脚本来恢复路径。这个包装会让启动时间多出几毫秒。
- Dolphin Anty 拒绝了一个临时邮箱域名,接受了另一个。它的新环境默认是 Linux,所以我们选择了 Windows 11。
- GoLogin 的新环境在执行应用自带的“Update profiles”步骤之前,首次启动的是 Orbita 109。计分的是 Orbita 154 的测试。
- Donut Browser 免费版不提供 Windows 指纹,所以用 Linux 指纹测试。按测试方法要求,它的异常值仍按 Windows 标准统计。
- AdsPower 免费版只能建 2 个环境。SunBrowser 和 FlowerBrowser 先后测试,各用两个新环境。在后两次 Cloudflare 测试中,每个内核各用一个环境。
- DICloak 免费版每天只能打开 15 次。它的 3 次速度测试没有预热,而且每次都恢复了额外的标签页,所以它的内存数据包含这些标签页。
- AliasMode Firefox 有一次速度测试没有加载探测页(我们测试脚本的问题),Donut Browser 有一次启动恢复了上一次会话的标签页。这两次各重测了一次。
- Camoufox 的启动时间包含该库自己通过代理查询位置的时间,约 3 秒。
- AliasMode Chromium 于 2026-10-29 在发布之前测试,用的是 AliasMode 应用源码和 beta.70 附带的 Linux 内核构建。它的环境通过应用的本地 API 启动,与应用窗口使用同一个启动器。
- 一次早期的 AliasMode Chromium 测试被作废:主机上另一个脚本连到了它的控制端口。之后的测试改用该脚本无法访问的端口,其他环境均未受影响。
复测
如果厂商通过联系页面申请用付费套餐测试,或者故障由我们的测试脚本造成,我们会复测该产品。产品无法完成某项检测时,该项记 0 分并附说明。每次复测都使用本方法,并在分级榜页面的更新记录中注明日期。
局限与偏向
- AliasMode 是我们开发的,也是被测产品之一。
- 异常值清单来自 AliasMode 在自己发布之前运行的检查。
- Cloudflare 规则是在出结果之后修改的。
- 一台没有 GPU 的电脑,每个产品一个 IP,只测免费版或试用。换成带显卡的 Windows 电脑或付费套餐,结果可能不同。