Explainers

验证码本地化:语言设置如何影响挑战

同一个 sitekey,日本站点弹出日语 reCAPTCHA,欧美站点却是英语——脚本是不是要按地区单独适配?结论:大多数情况下不需要。token 类验证码的语言只影响界面文案,不影响 token 本身;真正需要手动配置的,只有图片/OCR 验证码的 language 参数。

对 CaptchaAI 解题到底有没有影响

先看结论,再看细节——本地化改的是界面,还是 token 本身:

验证码类型 本地化会改变什么 本地化不会改变什么
reCAPTCHA 界面文案、图片标签、语音验证的语言 sitekey、验证流程、token 格式
Turnstile 小组件文案和错误提示 sitekey、token 格式、解题机制
hCaptcha 挑战说明、分类标签 sitekey、token 格式
图片/OCR 字符集、图片中的文字语言 图片格式、提交/轮询流程

token 类验证码:语言不影响解题

reCAPTCHA、Turnstile 这类验证码,语言只作用于界面层,不作用于 token 层

  • 提交 sitekey 和页面 URL
  • CaptchaAI 返回有效 token,无论小组件当时显示哪种语言,token 都同样有效
  • 不需要传任何语言参数

(hCaptcha 本地化机制相同,但 CaptchaAI 目前不支持 hCaptcha 解题。)

图片/OCR 验证码:language 参数要匹配字符集

图片验证码是唯一语言会直接影响识别结果的类型——语言变化改变的是图片里的字符本身:

网站语言 验证码图片内容 CaptchaAI language 参数
英语 "Enter the text: XKCD42" 0(默认/拉丁字符)
俄语 "Введите текст: ШКАФ" 1(西里尔字母)或 2
中文 "请输入验证码:汉字" 2(非拉丁字符)
阿拉伯语 "أدخل النص: عربي" 2(非拉丁字符)
日语 "文字を入力:ひらがな" 2(非拉丁字符)

language 参数填错,识别出来的字符就是错的——不是识别能力问题,而是参数没告诉它该按哪种字符集读图。

音频验证码

reCAPTCHA 语音验证按 hl 参数或 Accept-Language 头对应的语言播报,CaptchaAI 走标准 reCAPTCHA 流程处理,不依赖音频语言。

中国大陆开发者最容易踩的本地化坑

Accept-Language 和目标站点语言不一致

若抓取工具发送 Accept-Language: en-US,却访问日语站点,验证码界面可能以英语呈现——对 token 类验证码没有影响,但若站点校验语言一致性,就可能触发风控。稳妥做法是让 Accept-Language 头跟目标站点主语言保持一致。

不同地区的验证码服务商不一样

地区 常见验证码服务商
欧美市场 reCAPTCHA、Turnstile、hCaptcha
中国大陆 GeeTest(极验)、腾讯防水墙、自定义图片验证码
俄罗斯/独联体 自定义图片验证码、reCAPTCHA
韩国 自定义滑块验证码、图片验证码

CaptchaAI 目前只支持 GeeTest v3(v4 官方状态“即将支持”),不支持腾讯防水墙、阿里云验证码——抓取国内站点前先确认对方用的是哪一种。

验证码怎么判断用哪种语言

常见的语言判断信号:

1. Accept-Language 请求头

Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7

优先日语,其次美式英语,最后通用英语——reCAPTCHA 和 Turnstile 都读这个头选界面语言。

2. HTML 里的 hl 参数

reCAPTCHA 加载时可显式传语言参数,优先级高于 Accept-Language:

<!-- Force English reCAPTCHA -->
<script src="https://www.google.com/recaptcha/api.js?hl=en"></script>

<!-- Force Japanese -->
<script src="https://www.google.com/recaptcha/api.js?hl=ja"></script>

解题时不用匹配 hl 参数——无论界面显示什么语言,CaptchaAI 都会正常返回可用 token。

3. 地理 IP 定位

部分验证码配置按地区变化:

信号 影响
IP 来自中国大陆 可能拿到 GeeTest(极验)而非 reCAPTCHA(Google 脚本在国内网络下常加载不稳定)
IP 来自欧盟 可能先看到 GDPR 同意弹窗,再出现验证码
IP 来自高风险地区 可能面临更严格的挑战难度

4. 浏览器 navigator.language

JavaScript 验证码会读取浏览器语言:

navigator.language       // "en-US"
navigator.languages      // ["en-US", "en", "ja"]

无头浏览器默认使用系统 locale,容易和目标站点不匹配,抓取前应显式设置:

// Playwright
const context = await browser.newContext({
  locale: 'ja-JP',
});

// Puppeteer
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
  'Accept-Language': 'ja-JP,ja;q=0.9',
});

排查清单

问题 原因 处理方式
reCAPTCHA 显示的语言和预期不符 hl 参数与 Accept-Language 头不一致 token 与语言无关,不影响解题
图片验证码识别出错误字符 language 参数与图片字符集不匹配 非拉丁字符集设置 language=2
站点按地区提供不同验证码类型 服务商按地理 IP 做了差异化配置 用匹配目标地区的代理,配合正确 Accept-Language
无头浏览器显示的 locale 不对 使用了系统默认 locale 在浏览器上下文里显式设置
音频验证码用了意料之外的语言 hl 参数覆盖了 Accept-Language 头 不影响基于 token 的解题

常见问题

CaptchaAI 需要知道验证码显示的是什么语言吗?

对 CaptchaAI 支持的 reCAPTCHA、Turnstile 不需要,解题流程与语言无关(hCaptcha 目前不在 CaptchaAI 支持范围内)。图片/OCR 验证码需要——把 language 参数设置成与图片字符集匹配的值即可。

图片验证码的 language 参数到底该填 0、1 还是 2?

拉丁字符填 0;西里尔字母可以填 12;中文、日语、阿拉伯语等非拉丁字符集统一填 2。参数填错不会报错,但识别结果会是错的,排查“答案总不对”时先检查这个参数。

从中国大陆的服务器请求 reCAPTCHA 页面,会不会因为访问不到 Google 而报错?

有可能。reCAPTCHA 脚本托管在 Google,国内网络下加载常不稳定,导致的是页面超时而非解题失败——这是网络连通性问题,与 CaptchaAI 解题能力无关。

Accept-Language 设置和目标站点不一致,会导致解题失败吗?

不会,但可能让验证码界面用错误语言呈现,若目标站点交叉校验请求头一致性,也可能增加被判定异常流量的概率。稳妥起见,让 Accept-Language 与目标站点主语言保持一致。

同一个 sitekey,为什么日本站点和欧美站点弹出的验证码类型不一样?

不少站点按地理 IP 做验证码服务商的差异化配置,不只是换语言那么简单——同一套系统,不同地区流量可能被路由到不同提供商。这是站点自己的风控策略,CaptchaAI 支持的类型都能处理,只需脚本先识别当前页面加载的是哪一种。

下一步

在任意语言环境下稳定处理验证码——获取你的 CaptchaAI API Key,配置好 Accept-Language 与 language 参数即可开始。

相关指南:

该文章已禁用评论。