"绕过 CAPTCHA"这个说法被用于两种完全不同的场景,混淆两者正是大多数爬取方案失败的根源。第一种是让验证码从不出现:通过优化流量特征,使反爬系统将你识别为普通访客,从而永远不触发验证。第二种是借助 OCR、训练模型或人工打码服务,破解已经展示给你的验证码。前者是你能掌控的持久性工程实践,后者则是一场你大多时候必输的军备竞赛:每当验证码提供商推送更新,打码服务商的准确率就会随之下降。

本指南以这一区分为出发点,并将大部分篇幅用于讨论第一种场景,因为真正的收益在那里。现代 CAPTCHA 设计的演变使规避变得比以往更为核心:当今的系统会在决定是否显示任何内容之前,提前对你进行评分。理解评分机制,就能将分数控制在阈值以下,从而完全跳过验证环节。

CAPTCHA 现在究竟是什么

CAPTCHA 代表"全自动公共图灵测试以区分计算机和人类"。多年来,它意味着一种可见的测试:扭曲的文字、图片选择题、需要转录的音频片段。这些形式依然存在,但已不再是防线前沿。当今的主流系统(reCAPTCHA v3、hCaptcha 和 Cloudflare Turnstile)大多是不可见的。它们在后台运行,观察请求和会话的行为,并给出风险评分。低分直接放行,无需任何交互;高分则触发可见验证码、拦截,或给出静默降级的响应。

这是关键的思维模型。谜题不是关卡;评分才是关卡,谜题只是你未能通过评分时出现的结果。当你看到一个交通灯图片选择题时,系统早已判定你像一个机器人。这意味着真正的工作发生在上游,在于你在任何验证码渲染之前所发送的信号。破解谜题只是治标;优化信号才是治本。

避免触发,而非破解谜题

破解已呈现的验证码既脆弱,又随每次版本更新变得愈加困难。永不触发才是稳定的,因为干净的信号对每个版本的评分系统看起来都一样。将精力放在上游,放在请求本身,而非下游的答案上。

会让你被验证的信号

评分系统将多个独立信号融合为一个最终判决。单一信号通常不会将你拦截,但信号之间的矛盾会。一个看似住宅 IP、却携带无头浏览器指纹、加上毫秒级精确时序的请求,讲述的是一个前后矛盾的故事,而这些系统正是为捕捉这种矛盾而调校的。以下列出每个信号的含义,以及如何保持其清洁。

信号 会触发验证的情况 应对措施
IP 信誉与请求频率 数据中心 ASN,或单个 IP 快速发出大量请求 轮换住宅 IP,保持低单 IP 频率
浏览器与 TLS 指纹 无头浏览器标记、缺失或不一致的请求头、与所声称浏览器不匹配的 TLS 握手 真实的请求头、连贯的指纹、真实的浏览器引擎
行为特征 无鼠标移动、相同的时序、瞬间完成的表单填写、完美线性的导航路径 符合人类节奏的延迟、多样化的路径、渲染时有真实交互
蜜罐陷阱 填写隐藏字段或点击人类看不到的链接 尊重可见性,绝不触碰屏幕外或 display:none 的元素
会话与 Cookie 无 Cookie、无引荐历史、每次请求都是全新会话 持久化 Cookie,跨请求保持会话活跃

将这张表视为优先级清单,而非功能菜单。IP 和指纹是影响最大的两个信号,因为它们最先被评估,且对防御方来说运行成本最低。越深入站点,行为和会话的重要性越高。蜜罐是硬性失败条件:触碰一个,再干净的 IP 也救不了你。

规避策略手册(按优先级排序)

按顺序执行以下步骤。每一步都因特定原因降低你的机器人评分,前期步骤的效果最为显著。

1. 以低单 IP 频率轮换住宅 IP

IP 信誉是第一个被评估的信号,也是最廉价可执行的,因此大多数方案在这里折戟。数据中心网段解析出的是托管 ASN,一眼就会被标记;评分系统往往在你的请求到达页面之前就已经惩罚了它。住宅代理从真实消费者 ISP 连接出口,因此 IP 被识别为真人。但即便是受信任的 IP,如果被高频轰炸,仍然会触发频率限制,这正是轮换的原因。轮换住宅代理将请求分散到众多真实地址上,即便总量很大,单 IP 频率也保持在低位。消费它们的简洁方式是反向连接网关:一个在服务端交换出口 IP 的单一端点,详见如何使用轮换代理轮换 IP 地址。保持低单 IP 频率是你拥有的最高杠杆率习惯;只有当流量真正分散稀薄时,轮换才能发挥作用。

2. 真实的请求头与连贯的指纹

在 IP 之后,评分系统会读取你自称是谁。一个缺少真实浏览器所发送请求头的请求,或者携带与 TLS 握手矛盾的 User-Agent,都是容易被标记的信号。目标是连贯性:User-Agent、请求头集合、TLS 指纹以及 JavaScript 环境,都应描述同一个合理的浏览器。将住宅 IP 包裹在明显的无头浏览器指纹外面,比没有代理更糟糕,因为这种矛盾本身就是信号。大多数自制爬虫在这里泄露信息;详见浏览器指纹识别,了解实际被测量的内容。

3. 在页面需要时渲染 JavaScript

许多现代网站在客户端构建内容,并在浏览器中运行 CAPTCHA 评分脚本。原始 HTTP 请求从不执行该脚本,这本身可能看起来可疑,而且通常只返回一个空壳。使用真实浏览器引擎渲染页面的方式与访客浏览器相同,既能填充内容,又能产生更可信的执行环境。不过,只在目标需要时才渲染:它比普通请求更慢、成本更高,因此只保留给真正需要它的页面。

4. 符合人类节奏的行为

行为评分观察的是时序和交互。在紧密的、相同的循环中触发的请求带有机器签名,任何 IP 都无法掩盖。加入变化:调节请求节奏,改变间隔,渲染时允许真实交互发生,而非在 DOM 中瞬间跳转。目标不是欺骗人工审核员,而是避免那种能自动标记程序化行为的统计规律性。

5. 遵守 robots.txt,绝不触碰陷阱

蜜罐是专门为捕捉机器人而放置的字段和链接:隐藏的输入框、屏幕外的锚点、人眼看不到的链接。真实访客会忽略它们,因为浏览器将其隐藏;而直接解析原始 HTML 的简单爬虫则会径直走进去。尊重元素可见性,并将 robots.txt 视为道德边界和实践边界,因为被禁止的路径往往受到最严格的监控。

每次请求都开启全新会话、没有 Cookie、没有历史记录,是一个微小但真实的机器人特征。持久化 Cookie 并跨请求保持会话活跃,会让你的流量看起来像一个回访访客而非无穷无尽的陌生人流,同时也让站点自身的"这个用户没问题"信号在你身上积累。

做到以上六点,评分通常就会保持在验证码触发阈值以下,这正是重点所在:最干净的 CAPTCHA 策略,就是永远不触发 CAPTCHA 的策略。关于这一领域的更广泛实践,请参阅如何在不被封锁的情况下抓取网站;关于 Cloudflare 的具体场景,请参阅如何绕过 Cloudflare 并避免机器人检测

另一项工作:破解已呈现的验证码

有时验证码还是出现了,人们会求助于三种工具:针对旧式文字 CAPTCHA 的 OCR、针对图片选择题的训练模型,或通过 API 将谜题外包给真人的人工打码服务。它们确实存在,也有少数合法用例,例如在你拥有或获得书面许可的站点上自动化工作流。但在构建依赖它们的系统之前,请清醒地认识权衡。

  • 不可靠。准确率因验证码类型而异,并在提供商推送更新后随之下降。依赖打码成功率的流水线,继承了这种不稳定性。
  • 持续的军备竞赛。验证码提供商积极对抗打码服务。今天有效的方法是一个移动的靶子,这意味着你要与资源比你更多的对手永远做维护。
  • 额外的成本与延迟。人工打码服务按次收费,并为每次验证增加数秒的往返时间,这在大规模使用时会严重损害吞吐量。
  • 服务条款与法律风险。以编程方式破解站点安全控制,可能违反其服务条款,并在特定司法管辖区和特定目的下带来真实的法律风险。

诚实的建议:将破解视为有限、授权场景下的最后手段,而非你的爬取策略。如果你在大量例行性地破解 CAPTCHA,这是一个信号,说明你的上游信号出了问题,修复它们比持续为打码服务付费更便宜、更持久。本指南故意不提供破解线上验证码的方法,因为负责任的答案和有效的答案是同一个:避免触发。谷歌搜索场景下这一权衡的具体细节,请参见如何在抓取 Google 时绕过 CAPTCHA

合规与法律

这些行为是否被允许,并非一句话能说清;它取决于站点的服务条款、你所在的司法管辖区以及你的目的。几条原则在大多数情况下都站得住脚:只爬取公开数据,即未登录访客可见的信息,而非认证墙后面的内容;遵守 robots.txt 和站点能承受的频率;不要访问登录墙后面的数据,也不要收集没有合法依据持有的个人数据。用于分析的公开聚合元数据与批量收集个人信息处于完全不同的法律地位,后者是大多数法律和伦理风险的所在。

实践层面的结论与工程层面高度一致:持久的方法(通过在公开页面上表现得像真实访客来避免触发)也是可辩护的方法。如果一个项目确实需要认证后数据或高于站点容忍度的频率,正确的路径是官方 API 或数据协议,而非更聪明的绕过手段。

整合为单一端点

规避策略手册有六个活动部件:IP 池、轮换逻辑、连贯的指纹、渲染层、请求节奏控制和会话管理。自行构建和维护所有这些是真正的工作量,而任何一个缺口(泄露的无头浏览器标记、悄悄攀升的单 IP 频率)都足以开始触发验证码。托管的爬取端点将这些部件折叠进一次请求,让评分保持在低位,而无需你亲自照看每一个环节。

Crawlbase Crawling API

Crawling API 将轮换住宅 IP、指纹一致性、JavaScript 渲染和自动重试整合进一次调用,让验证码从一开始就很少触发,而非在触发后才去破解。你只需传入 token 和 URL,规避工作在服务端完成。在接入更深层逻辑之前,先在免费套餐上对真实目标进行测试。

实际上,这只是一个 GET 请求。你传入 token 和目标 URL,在页面需要时开启渲染。

python
# Rotation, fingerprint, rendering, and retries are server-side,
# so the request scores low and the challenge rarely fires.
import requests

resp = requests.get(
    "https://api.crawlbase.com/",
    params={
        "token": "YOUR_CRAWLBASE_TOKEN",
        "url": "https://example.com/listing/123",
        "javascript": "true",  # render only when the page needs it
    },
)
print(resp.status_code)
print(resp.text)

如果你看到的状态码像是被拦截或返回了验证页,请将其视为信号而非噪音:当前的 IP 层级或频率已不足以应对该目标。代理状态错误码一文详细解析每个状态码的含义。

回顾

核心要点

  • 规避胜过破解。永不触发验证码是持久的;破解已呈现的验证码是一场脆弱的军备竞赛。将精力放在上游。
  • 评分才是关卡。现代系统在显示任何内容之前就对你评分,因此战场在于你发送的信号,而非你作答的谜题。
  • IP 和指纹优先。以低单 IP 频率轮换住宅 IP,加上连贯的指纹,是将评分控制在阈值以下最有效的手段。
  • 打码服务是最后手段。OCR、模型和人工服务不可靠、成本高,且可能违反服务条款;仅在有限的授权场景中使用。
  • 坚守公开数据。合法性取决于服务条款、司法管辖区和目的;遵守 robots.txt,绝不触碰登录墙后或个人数据。

常见问题

规避和破解 CAPTCHA 有什么区别?

规避是指通过发送干净的信号(受信任的 IP、连贯的指纹、符合人类节奏的行为)让反爬系统永远不触发验证码。破解是指使用 OCR、模型或人工打码服务,击败已经出现的验证码。规避是你能掌控的持久性工程实践;破解则是与验证码提供商之间脆弱的军备竞赛。大多数情况下,修复触发验证码的信号比破解它更便宜、更可靠。

为什么我没在破解任何可见内容,却还是遭遇了 CAPTCHA?

reCAPTCHA v3 和 Turnstile 等现代系统大多是不可见的。它们在后台对你的请求和会话评分,只有在分数较高时才显示可见谜题。因此,CAPTCHA 的出现意味着你已经在评分中失败,通常是因为数据中心 IP、无头浏览器指纹或机器式时序。修复点在上游的这些信号,而非谜题本身。

轮换代理能阻止 CAPTCHA 吗?

这是影响最大的单一步骤,但单靠它并不完整。轮换住宅代理修复了 IP 信誉并保持低单 IP 频率,这是第一个被评估的信号。你仍然需要连贯的浏览器指纹、符合人类节奏的行为和正确的会话处理,因为一个干净的 IP 包裹在明显的机器人指纹外面,评分仍然会很高。

CAPTCHA 打码服务值得使用吗?

很少,且只适用于有限的授权场景。它们不可靠,准确率在验证码提供商更新后就会下降,还会增加成本和延迟,以编程方式破解安全控制可能违反服务条款。如果你在大量破解 CAPTCHA,这通常意味着你的上游信号出了问题;修复它们比为打码服务持续付费更持久。

爬取时绕过 CAPTCHA 合法吗?

这取决于站点的服务条款、你所在的司法管辖区以及你的目的,因此没有笼统的是或否。保持安全边际意味着只爬取公开数据,遵守 robots.txt 和站点的频率限制,绝不访问登录墙后的内容或在没有合法依据的情况下收集个人数据。对于公开数据以外的需求,官方 API 或数据协议才是正确路径。

托管 API 能为我处理这一切吗?

可以。Crawlbase Crawling API 将轮换住宅 IP、指纹一致性、JavaScript 渲染和重试整合进一次请求,让请求评分保持在低位,验证码几乎不会触发。你传入 token 和 URL,规避工作在服务端完成,比自行维护代理池、无头浏览器集群和节奏控制逻辑要简单得多。

开始构建

大规模爬取任何站点,无需与基础设施对抗。

Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。

自助开通 · 无需销售通话 · 提供企业级爬取量