Source: https://bscan.info/zh/blog/bot-detection
Language: zh-Hans

Selenium、Puppeteer 和 Playwright 会在它们驱动的浏览器里留下痕迹。运行一次实时测试，看看反机器人系统会检查哪些自动化信号，以及为什么隐身插件反而会让机器人更容易被抓到。

# 你会被识别为机器人吗？测试你的浏览器是否泄露自动化特征

发布于 2026年7月14日 · 更新于 2026年10月9日

如果你会自动化操作浏览器，无论是用于爬虫、QA 测试还是账号管理，有一个问题决定了你是能顺利通过还是[撞上一个 CAPTCHA](https://bscan.info/zh/blog/captcha-everywhere)：你的浏览器看起来像真人吗？本页上的这个小工具，会把这个问题逐项抛给你当前的浏览器。

几年前，一行 JavaScript 就能给出答案。Selenium、Puppeteer 和 Playwright 都会把 `navigator.webdriver` 设为 `true`，网站只要读回这个值就行。如今这项检查几乎抓不到任何人，因为每一套认真的自动化方案都会在页面加载前把这个标志改回去。检测手段早已向前发展。本文就来梳理它走到了哪一步。

**简而言之：**机器人检测早已不再是单一的一个标志，而是一整套堆叠起来的信号。那些容易暴露的破绽（webdriver、带 headless 字样的 User-Agent）已经作古。真正持久的信号藏在渲染管线和 DevTools 通道里，而且隐身插件越是卖力去掩盖那些容易暴露的破绽，它打的补丁本身就越容易被认出来。

## 那些经典破绽，以及它们为何失效了

以下这些检查，是每一篇 2019 年的教程至今仍在教的，也是每一款现代隐身插件都能破解的：

-   **`navigator.webdriver`。** 被 Selenium、Puppeteer 和 Playwright 翻转为 `true`，又被每一款隐身工具用一行代码改回 `false`。
-   **带 “HeadlessChrome” 字样的 User-Agent。** 老版本的 headless Chrome 会在 User-Agent 字符串里自报家门。稍微用心的人都不会把它留在里面。
-   **空的插件列表和语言列表。** 这些是 headless 的默认状态，一行设置就能修好。真正的桌面版 Chrome 自带 PDF 插件，并且始终至少上报一种语言。
-   **缺失的 `window.chrome` 对象。** 某些自动化构建版本会把它剥离掉，这在一个自称是 Chrome 的浏览器上显得很奇怪。

这些如今都拦不住一个像样的机器人了。它们之所以还留在测试里，是因为能瞬间揪出那些粗心大意的，也因为真正的浏览器不费吹灰之力就能通过。

## 如今检测真正发生在哪里

那些依然有效的检查，并不是些表面的标志。它们是浏览器被驱动方式所带来的必然后果，这让它们难以被补丁抹去。

**DevTools 通道。** Puppeteer 和 Playwright 通过 Chrome DevTools Protocol 来控制 Chrome，而为了完成工作，它们启用了其中的 `Runtime` 域，这个域会悄悄序列化每一个被交给控制台的对象。这种序列化会读取一些别的东西根本不会去读的属性。记录一个 `Error` 对象，并在它的 `stack` 属性上设个陷阱，自动化通道就会露出马脚，无论表层的标志被打磨得多么仔细。这是最难隐藏的一个信号。它在你此刻只是开着 DevTools 时也会触发，这也是小工具会特别提示这一点的原因。

**软件渲染。** 服务器上的 headless 浏览器没有 GPU，于是它会退回到软件渲染器：Chrome 上用 SwiftShader，Linux 上用 llvmpipe。[WebGL 的渲染器字符串](https://bscan.info/zh/blog/webgl-fingerprinting)会把这一切明明白白地写出来。真正的笔记本会上报 Intel、Apple、AMD 或 NVIDIA 的 GPU，而 “Google SwiftShader” 意味着一台服务器在假扮成它们。我们的 [canvas 指纹文章](https://bscan.info/zh/blog/canvasHash) 出于别的原因读取的，也是同一个渲染器字符串。

**被打过补丁的原生函数。** 这就是隐身工具核心处的悖论：为了隐藏 `navigator.webdriver`，插件必须去覆盖它，而一个被覆盖过的内置函数，在脚本检视它的源码时就不再返回 `[native code]` 了。隐身插件动过的每一个函数，都会变成这个插件存在的证据。补丁打得越彻底，能被找到的东西就越多。那些伪造 canvas 或 WebGL 读数的隐私扩展也会触发同一项检查，哪怕你从不自动化任何东西，这一点也值得知道。网站[检测广告拦截器](https://bscan.info/zh/blog/adblock-detection)靠的也是同一套观察效果的逻辑：页面永远看不到扩展本身，只能看到它删掉了什么。

**引擎一致性。** 一些细小的内部常量，比如 `eval` 的确切源码长度，在每个 JavaScript 引擎里都是固定的。声称自己是 Chrome，而你的引擎常量却另有说法，那 User-Agent 就被戳穿成了一身戏服。这跟我们在 [一个浏览器，五种操作系统声明](https://bscan.info/zh/blog/platform-spoofing) 中描述的操作系统矛盾陷阱、以及在 [你的 User-Agent 在撒谎](https://bscan.info/zh/blog/chromium-version) 中描述的浏览器版本矛盾陷阱，是同一回事。

## 行为，隐身工具够不到的那一层

以上所讲的都是浏览器静止时的样子。没有任何插件能给它打补丁的信号，是页面打开之后发生的事。反机器人系统会观察交互的”物理规律”：一次点击之前没有任何鼠标移动，一个光标沿着一条完美的直线滑动，滚动时毫无缓动，按键之间以机器般的规律间隔。人类的”噪声”是以一致的方式出现的。而脚本的”干净”，则是人类永远不会有的那种干净。一份静态指纹可以一次性伪造出来；行为却必须在整个会话期间都表演得令人信服。

本页上的测试只是静态的，因为行为评分需要一个模型和一台服务器。但行为正是商业检测的发展方向，也正因如此，把每一个标志都打上补丁仍然不够。不过，收集这一步并不需要服务器：我们首页的[实时行为监测面板](https://bscan.info/zh#live-behavior)会实时跟踪你的光标物理特征、点击来源和[焦点模式](https://bscan.info/zh/blog/can-websites-see-tab-switching)，并展示检测系统会从中得出什么结论。

## Cloudflare 和 DataDome 如何给你打分

像 Cloudflare、DataDome、Kasada 和 HUMAN 这样的商业反机器人系统，不会依赖任何单一的检查。它们把上面这些 JavaScript 信号，与网络指纹（TLS 握手和 HTTP/2 行为，这些是 JavaScript 看不到也改不了的）、IP 信誉和行为评分结合起来，在毫秒之间把这一切融合成一个分数。DataDome 甚至会为它所保护的每一个站点单独训练一个模型。你要过的不是一场考试。你要做的是在所有考试上同时看起来一致。同样的评分机制也会落在从不自动化任何操作的普通人身上：如果你正是这样，我们另写了一篇指南，讲[为什么你总是遇到人机验证](https://bscan.info/zh/blog/captcha-everywhere)，以及如何找出触发它的那个信号。

这也是任何浏览器内测试（包括这一个）诚实的局限所在。它看到的是客户端那一半。而网络那一半，是在服务器端、在你的 JavaScript 还没跑一行代码之前就被测量好的。

## AI 智能体正在改变这个问题

最新的一批机器人，是 AI 浏览器智能体。像 Claude 的 computer use、OpenAI 的 Operator 和 Browser Use 这样的工具，会驱动真实的浏览器替人完成任务，而它们能轻松滑过那些经典检查，因为它们底层往往就是普普通通的 Chrome。不过那些持久的破绽依然适用。它们是通过 DevTools Protocol 驱动的，经常在带软件 GPU 的服务器上以 headless 方式运行，而且它们的交互时序是机器般干净的。检测厂商正在悄悄地从”这是不是机器人？“转向”这是一个真人、一个善意的机器人，还是一个自主智能体？“，而他们用来回答这个问题的，恰恰就是本页小工具里的那些信号。

## 到底该怎么做

1.  **绝不要打一半的补丁。** 一个明显被动过手脚的浏览器，是一个比诚实浏览器更罕见、也更刺耳的信号。那些一个接一个去修标志的隐身插件，正好制造出了反机器人系统苦苦追猎的那种证据。如果你没法让整套堆栈保持一致，那么多打补丁只会让情况更糟。
2.  **在依赖你的方案之前先测试它。** 在它让你损失一个账号或一整天的爬虫工作之前，把你运行的东西对着本页、以及 [完整浏览器扫描](https://bscan.info/zh) 跑一遍。你自己发现的破绽，是你能够修复的破绽。
3.  **如果你要管理多个身份，请使用一款从构造上就保持一致的浏览器。** 真实的渲染引擎，真实的 GPU 输出，原生函数保持原封不动，以及一份从 WebGL 字符串到字体列表都自洽的指纹。这正是防关联（anti-detect）浏览器存在的意义。[Incogniton](https://www.incogniton.com/?utm_source=bscanInfo&utm_medium=Website&utm_campaign=BotDetectionBlog) 会把每一个配置文件都构建成一个真实、自洽的浏览器，让这些信号彼此吻合，而不是相互矛盾。

自动化浏览器和防关联浏览器都是合法的工具，有大量正当的用途，从 QA 测试、广告核验到管理商业账号。某个具体站点是否允许使用它们，取决于该站点的规则，所以在大规模行动之前，先了解清楚这些规则。

想看看你自己的浏览器扛不扛得住？本页上的小工具会检查客户端的自动化信号，而 [完整浏览器扫描](https://bscan.info/zh) 则会连同 WebRTC 泄露测试、指纹哈希，以及平台和版本的交叉核对一起运行。

[运行完整浏览器扫描](https://bscan.info/zh)

## 继续阅读

[

![一个浏览器，五种操作系统声明：为什么平台伪造总是露馅](https://bscan.info/platformCover.svg)

一个浏览器，五种操作系统声明：为什么平台伪造总是露馅

](https://bscan.info/zh/blog/platform-spoofing)[

![你的 User-Agent 在撒谎，你的 Chromium 版本不会。](https://bscan.info/chromiumVersionCover.svg)

你的 User-Agent 在撒谎，你的 Chromium 版本不会。

](https://bscan.info/zh/blog/chromium-version)[

![Widevine DRM 与反检测浏览器：Zen 浏览器的反常现象](https://bscan.info/widevineCover.svg)

Widevine DRM 与反检测浏览器：Zen 浏览器的反常现象

](https://bscan.info/zh/blog/widevine-drm)

---
This is the page's server-rendered documentation. Interactive browser tests, file processing and permission prompts require the HTML page; Markdown does not contain live measurements or process files.
