Scarnox · Blog

无头浏览器被检测到:原因与解决方法(2026)

网站提示“检测到无头浏览器”,或者悄悄给你的自动化浏览器返回另一个页面。网站这样做,是因为无头浏览器没有窗口运行,并且在一些细微但可以测量的地方,与普通桌面浏览器不同。本指南说明网站会看哪些信号,如何诊断你自己的浏览器暴露了什么,以及合理的解决方式是什么。同时也会说明什么时候应该停下来,或者把这项检测当作验证码步骤来处理。

为什么网站会检测无头浏览器

自动化框架驱动的是真实的浏览器内核,所以页面的大部分行为是一样的。差异主要出现在边缘位置:

网站会把这些信号综合成一个分数。分数低可能意味着静默降级、额外的检查,或者直接拦截。

第 1 步:看看你的浏览器暴露了什么

在改动任何东西之前,先看看页面能从你的自动化浏览器中读到什么。下面的脚本会打开一个你自己控制的页面,并输出关键信号。它只是一个诊断工具:只在你自己的测试页面上使用,不要用来探测别人的系统。

from playwright.sync_api import sync_playwright

CHECK = """() => ({
    webdriver: navigator.webdriver,
    languages: navigator.languages,
    plugins: navigator.plugins.length,
    userAgent: navigator.userAgent,
    screen: [screen.width, screen.height],
    viewport: [window.innerWidth, window.innerHeight],
    timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
})"""

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")  # 替换为你自己的页面
    print(page.evaluate(CHECK))
    browser.close()

用 headless=False 再运行一次同样的脚本,然后比较两次的输出。两者之间的差异,就是网站可能注意到的地方。

第 2 步:修复不一致的地方,而不只是隐藏标志

只隐藏一个标志、而其他信息保持不变,是最常见的错误。如果 User-Agent 显示 Windows,但字体、时区和屏幕尺寸却描述的是一台 Linux 服务器,这比单一属性更容易被识别。目标是让整个环境内部保持一致:

Playwright 可以在一个地方设置其中几项:

context = browser.new_context(
    locale="en-US",
    timezone_id="America/New_York",
    viewport={"width": 1366, "height": 768},
)
page = context.new_page()

第 3 步:放慢速度,像一个普通访客那样操作

自动化如果比人类快得多,就会非常明显。在页面加载之间加入真实的停顿,避免以完全固定的节奏点击同一个元素,并且不要从同一个地址并行打开成百上千个页面。请求更少、速度更慢,也能减轻网站的负载,这本来就是应该做的事。

第 4 步:判断什么时候检测是验证码

有些检测流程的结果不是封锁,而是一个挑战。你会看到验证码控件,这一步需要从识别服务获取 token。目前 Scarnox 上线的验证码类型是 PopularCaptcha。PopularCaptcha Python 指南展示了如何请求并提交 token。其他控件(例如 Cloudflare Turnstile)在路线图上,但尚未上线,所以在规划之前,请先看验证码类型说明。

出现验证码步骤,并不意味着你的其他配置就是正确的。如果同一个网站无论你怎样配置,都封锁每一次无头会话,这就清楚地表明网站所有者不希望被自动化访问。请尊重这一点。

不应该做的事

不要试图对禁止自动化访问的网站隐藏自动化行为,也不要用检测规避工具突破访问控制。这与本指南所讨论的测试和公开数据收集,是完全不同性质的项目。如果你的项目需要你尚未获得授权的访问权限,请询问网站所有者,或者寻找官方 API 或数据源。

负责任地抓取

后续方向

如果你的自动化用于端到端测试,思路有所不同,请参阅自动化测试中的验证码。如果你在使用 Playwright 或 Puppeteer,Playwright 与 Puppeteer 验证码处理说明了 token 应该放在哪里。

免费试用额度,无需信用卡:注册账户,然后在你自己的页面上测试 PopularCaptcha 流程。当前费率请查看定价页面。

下一步