TRACIO 的机器人检测采用双层架构识别自动化浏览器、无头工具和脚本化攻击:浏览器代理 在客户端采集,服务端负责分析。它覆盖主流自动化框架、无头浏览器、AI 浏览智能体 和反检测浏览器,误报近乎为零,同时自动将合法的搜索引擎爬虫加入白名单。
浏览器代理会执行一组范围广泛的检查并报告结果。在服务端,这些结果经过加权形成机器人
评分,评分再映射为判定。少数几项毫不含糊的指标本身即具有决定性,无论其余结果如何,
都会强制得出 bot 判定。
哪些检查会运行、如何加权、阈值设在何处,在任何套餐上都不公开。 把它们写进文档, 等于精确告诉机器人运营者应当改动什么才能绕过防护。您得到的是判定、机器人类型标签, 以及在 Business 及以上套餐中说明该决定背后观察类别的 原因码。
每一次识别都带有机器人判定。它在 webhook 载荷中以 bot.result
到达,在客户端 SDK 中则是 result.bot。
| 结果 | 说明 |
|---|---|
human | 未发现自动化迹象。已验证的搜索引擎爬虫同样归为 human。 |
bot | 检测到自动化或脚本化访问,并附带 bot.type 标签。 |
uncertain | 信号混杂或较弱 —— 既不能明确判为人类,也不能明确判为自动化。 |
它映射到仪表盘和 webhook 载荷中通用的业务字段 decision.action(real、fake 或
suspicious)。
判定随附 bot.score。在 webhook 载荷版本 2 中,它是 0..100 的小数 —— 与仪表盘为该次
访问展示的数字完全一致。(在已冻结的版本 1 模式中,它是 0..1 的比例;参见
Webhooks。)
当结果为 bot 时会出现 bot.type。它要么是已识别的机器人或运行时的名称,要么是
类别(当点名具体检查会暴露检测器内部实现时):
bot.type | 含义 |
|---|---|
playwright、jsdom、electron | 识别出所列名称的自动化运行时 |
browser_use、claude_computer_use、skyvern、genspark、fellou | 识别出所列名称的 AI 浏览智能体 |
automation | 自动化工具,但不点名具体检查 |
headless | 无用户界面运行的浏览器 |
antidetect | 反检测 / 指纹伪造构建版本 |
extension | 驱动自动化、代理或 VPN 的浏览器扩展 |
privacy_browser | 隐私强化的浏览器构建版本(例如 Mullvad Browser) |
other | 已检测到,但不在公开词表范围内 |
这份清单是有意封闭的:明天加入检测器的新检查会以 other 的形式出现,而不会泄露其
内部名称。请把 bot.type 当作用于分支判断的标签,而不是需要校验的完备枚举 —— 具名
运行时会随时间不断增加。
在 Business 和 Enterprise 套餐中,webhook 载荷会携带 reasons 数组 —— 最多 8 条,
按重要性排序。每个码说明观察的类别,绝不透露其背后的检查:
| 码 | 含义 |
|---|---|
automation_signature | 自动化工具的痕迹 |
headless_browser | 没有用户界面的浏览器 |
anonymous_browser | 伪装成普通环境的隐私强化或反检测构建版本 |
privacy_hardening | 激进的隐私设置 |
behavior_anomaly | 不像人类的交互模式 |
fingerprint_tampering | 本应彼此吻合的值并不吻合 |
environment_anomaly | 运行时环境自相矛盾 |
identity_mismatch | 声明的身份与观察到的情况不符 |
virtual_environment | 模拟器,而非物理硬件 |
strong_automation_evidence | 毫不含糊的机器人指标 —— 本身即具决定性 |
detection_signal | 其他被触发的检查 |
severity 取值为 high、medium 或 low,它表示该类别在本次访问的判定中所占的
比重,而不是该码的固定属性。同一个码可能在一次访问中为 high,在另一次访问中为
low,因此不要把它当成常量缓存。
privacy_hardening 尤其需要小心:它对普通的注重隐私的访问者与对规避行为一样会触发。
请与其余信号一并权衡,不要仅凭它单独行动。
virtual_environment 来自模拟器检测。Web 上没有单独的“运行在 Hypervisor 之下”的判定:
浏览器能看到的线索 —— 通用的软件渲染器、异常偏低的核心数 —— 在没有 GPU 驱动的普通机器上
以及在远程桌面会话中同样常见,因此我们不会把它们变成需要您反复揣测的判定。
| 能力 | 可用范围 |
|---|---|
| 自动化、无头与 AI 智能体检测 | 所有套餐 |
| 已验证爬虫白名单 | 所有套餐 |
| 模拟器检测 | 所有套餐 |
反检测指标(bot.antidetectScore,0..100) | Pro 及以上 |
| 原因码、行为区块 | Business 及以上 |
| DevTools 检测 | Business 及以上 |
反检测评分仍在校准中。 提供
bot.antidetectScore是为了让您可以观察它并调整 自己的策略 —— 请把它当作风险决策的输入,而不是单独据以拦截的理由。
仅限移动端的检查在 Web 上无效。 Root、越狱、克隆/分身应用和 Frida 检测依赖浏览器 无法采集的原生移动端信号。TRACIO 只提供浏览器 SDK,因此请依赖在 Web 上完全生效的 自动化、无头、AI 智能体、反检测、模拟器和行为判定。
已知的良性机器人先通过 user-agent 识别,随后针对发起连接的 IP 进行验证 —— 对该 IP 做反向 DNS 查询,检查得到的主机名是否属于运营方域名,再做一次正向查询确认它解析回同一 个 IP。这正是爬虫运营方自己公布的验证流程。
| 爬虫 | 验证域名 |
|---|---|
.googlebot.com、.google.com | |
| Bing | .search.msn.com |
| Apple | .applebot.apple.com |
| Yahoo | .crawl.yahoo.net |
| Yandex | .yandex.com、.yandex.net、.yandex.ru |
| DuckDuckGo | .duckduckgo.com |
已验证的爬虫会归为 human。若某个请求自称是 Googlebot,而其 IP 明显属于他人,则会被
判为机器人 —— 仅仅是查询缺失或超时,并不被视作伪造的证据。
交互动态 —— 指针移动、键盘节奏、滚动 —— 作为是否有人在场的证据参与判定,而不是
用来判断是哪一个人。在 Business 及以上套餐中,其汇总结果通过 webhook 的 behavior
区块交付:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score 取值 0..100(越高越像人类),verdict 为 human、uncertain 或 bot,
confidence(0..1)说明该判定建立在多少证据之上 —— 只有两次指针移动的短暂访问,
即便判定看起来很确定,这里的取值也会很低。
只有在该次访问确实运行了行为评分时,这个区块才会出现。区块缺失意味着“没有数据”, 绝不意味着“没有可疑之处” —— 不要把它的缺席读作干净的信号。
客户端 SDK 提供了一个便捷布尔值 result.bot.detected,以及 0..100 量表上的
confidence:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)在您的服务器上,请基于 webhook 投递来处理。机器人判定位于 bot
对象中 —— bot.result 和 bot.type:
// `event` is the webhook delivery body (/docs/webhooks)app.post("/webhook/tracio", async (req, res) => { const event = req.body
if (event.bot?.result === "bot") { await db.blockedRequests.insert({ visitorId: event.visitorId, botType: event.bot.type, ip: event.ip, timestamp: new Date(), }) }
res.status(200).send("OK")})零值和空值会从载荷中省略,因此请以防御性的方式读取 bot.type,不要在您的模式中把它
设为必填。
TRACIO 的机器人检测以近乎零误报为目标设计,但仍存在边缘情况:
| 场景 | 风险 | 缓解措施 |
|---|---|---|
修改 navigator 的浏览器扩展 | 低 | 跨众多检查的交叉验证可防止单项检查触发 |
| 企业安全软件 | 极低 | 无头分类需要有佐证证据 |
| 无障碍辅助工具 | 无 | 无障碍 API 不参与机器人检测 |
| VPN/代理用户 | 无 | 网络标记与机器人判定分开跟踪 |
如果您遇到误报,请查看 bot.type(以及 Business 及以上套餐中的 reasons),了解触发的
是哪一类观察,然后据此调整策略。常见原因参见故障排查。