
Emma Foster
Machine Learning Engineer
已发表 Oct 16, 2026
已更新 Oct 16, 2026 · 最小阅读量

ERROR_CAPTCHA_UNSOLVABLE 表示 CapSolver 本次未能识别 CAPTCHA;仅凭错误码本身无法定位某个“唯一原因”。errorCode 和 errorDescription。无效任务数据、账户错误、超时以及网站拒绝返回的 token 都是不同情况。脚本提交 CAPTCHA 任务、等待结果,并收到 ERROR_CAPTCHA_UNSOLVABLE。下一步看似是再发起一次请求,但如果页面已发生变化或请求已不再准确描述当前挑战,自动重试只会重复同样的问题。
CapSolver 将该错误与输入格式错误和任务超时单独记录。这一区分正是排查问题的起点。本文说明该错误码真正传达了什么信息、需要检查哪些细节,以及如何判断再次尝试是否有意义。该流程适用于合规测试与自动化场景。文中并未承诺通过修改某一个参数就能解决所有失败,也不会把访问限制视为继续尝试的授权。
ERROR_CAPTCHA_UNSOLVABLE 表示本次识别尝试未成功,并不是说已经有一个可用解等待提交。
官方错误码文档 中将该错误描述为“CAPTCHA 未被识别”。同一条目说明了对此错误不收取费用,并建议重试。该计费说明仅针对这条已记录的错误码本身;不能将其泛化到所有失败的浏览器流程或任意类型的 API 失败。
在归因前先阅读完整响应。API 使用 errorId、errorCode 和 errorDescription 描述服务端错误。保存这些字段以及当时的任务上下文,而不是把一切都简化成“验证码失败”之类的消息。否则,客户端的超时或解析异常看起来会与解题服务的响应完全相同。
CAPTCHA 只是应用工作流中的一个阶段。服务没产生解、与应用拒绝掉已有解,是两类不同的问题,需要不同的排查方法。将各阶段分开,有助于避免对错误问题应用重试策略。
先判断失败发生在请求提交阶段、结果获取阶段,还是应用处理阶段。
createTask 文档 区分了同步返回结果的任务和只返回任务 ID 的异步任务。对于异步任务,带有任务 ID 的创建响应并不等同于成功解题。应使用已有任务 ID 按照结果获取流程 来观测最终结果。
如果客户端从未收到响应,需要将这一事实记录下来。不要为传输失败虚构一个服务错误码。同样,如果响应中已经包含可用解,而网站之后将其拒绝,那么应用层的错误也应单独保留。后续的拒绝并不会将之前的服务响应“改写”为 ERROR_CAPTCHA_UNSOLVABLE。
使用一个简短时间线:提交时间、任务 ID(若有)、结果或错误、以及若到达应用层则记录其最终结果。时间线通常能回答支持团队的第一批问题,而无需提供大型浏览器录屏或完整的敏感请求数据导出。
在再次尝试前,把准备提交的任务与页面当前实际使用的挑战进行比对。
先确认 CAPTCHA 的家族与具体变体。外观类似的小组件并不足以决定任务类型。先确认页面是否使用了你以为的那种 CAPTCHA 家族,再对照该家族当前的任务协议。不要通过随意改动教程中的字符串来构造一个“新”任务类型名称。
以 reCAPTCHA v2 为例,任务参考文档 会说明相关页面 URL、公有 sitekey、支持的任务变体以及可选字段。这些输入必须描述同一个当前页面及其小组件。字段名正确但从不相关 demo 中复制的值,依然是你当前流程中的错误输入。
如果工作流出现跳转、刷新了挑战、更换了运行环境、或进入了另一张表单,都要重新检查输入。
本地保存的配置可能描述的是昨天的部署,或是同一页面上的另一个小组件。要保持浏览器观测到的信息与发送给解题服务的请求相互对应。如果一张表单包含多步验证,要确认是哪一步产生了这些参数,而不是简单使用文档里找到的第一个 sitekey。
CapSolver 检测器说明 提供了一种通过浏览器开发者工具检查 CAPTCHA 参数的方法。请将检测到的值与官方任务文档进行比对。检测只是在采集证据;它并不能保证基于这些参数构造的每个请求都一定成功。
使用任务特定的选项,是因为当前页面与文档确实要求它们,而不是因为某个示例里刚好包含。
缺少一个可选字段并不自动构成解题失败的原因。随意增加代理、action 或其他猜测字段,反而可能带来新的参数不匹配。先比较一个小而清晰、符合文档的请求与观察到的页面,再一次只调整一个有明确理由的设置。
将私密账户凭证与公开的页面标识分开处理。如果响应报告的是账户 key、余额等问题,应优先解决该类问题。再次尝试识别并不能纠正无效账户凭证。
兑换你的 CapSolver 奖励码
立刻提升你的自动化预算!
充值 CapSolver 账户时使用奖励码 CAP26,每次充值即可额外获得 5% 奖励金额 —— 没有次数上限。
现在就前往 CapSolver 控制台 进行兑换。
当操作仍被允许、页面状态是最新的、且下一次尝试有明确终止条件时,重试才是有意义的。
文档中“建议重试”并不等于推荐无限循环。应为尝试次数和整体等待时间设置上限,使其适应你的应用场景。如果在检查输入无误后仍得到相同响应,应停止并收集证据,而不是盲目加大请求量。
创建一个新任务就意味着发起新的一次尝试;而查询一个异步任务的结果,只是在观测那一次尝试。不要在重试循环中混用这两类操作:当第一个任务仍在处理中时反复调用创建接口,只会产生多个并行尝试,而不是更快获得原始任务的信息。
在浏览器测试环境中,还要留意测试运行框架本身的重试策略。Playwright 的重试文档 说明了失败的测试如何再次运行,并会将只在重试时才通过的测试标记为不稳定。整条测试用例的重试,可能会在你自建的解题重试逻辑之外,再额外重复一次解题步骤。请明确谁来做重试决策,避免两层重试在缺乏可视化的情况下叠加调用次数。
在修正已观察到的参数不匹配后,进行一次小规模且合规的检查,并与前一次尝试结果进行对比。
记录修改内容、任务类型、返回结果以及应用是否完成整个流程。如果你一次性修改了多个互不相关的设置,即使重试成功,也无法判断究竟是哪一项改动起了作用。受控对比可以累积出当问题再次出现时仍然有用的证据。
确保停止条件本身是有意义的。未完成的任务就应保持“未完成”状态,并附带原因记录。把空对象当作“成功观测”返回,会掩盖失败并干扰后续报表和分析。
使用“准确的错误类别”来选择下一步检查方向。
| 观测到的情况 | 首要检查项 |
|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
回顾当前挑战与请求;考虑设定上限的重试 |
ERROR_INVALID_TASK_DATA |
阅读描述并修正响应中指出的输入错误 |
ERROR_TASK_NOT_SUPPORTED |
确认所用任务类型与挑战确为官方支持 |
ERROR_TASKID_INVALID |
检查用于获取结果的任务 ID 是否正确 |
ERROR_TASK_TIMEOUT |
检查任务耗时和应用端等待策略 |
| 解题成功、网站仍拒绝 | 检查 token 传递方式与应用的验证结果 |
这些只是排查路径,并不保证某一次检查就能解释所有原因。在升级工单时务必保留原始错误文本。把它替换成宽泛的标签会删掉支持团队可能依赖的重要信息。
如果网站由你控制,可以把浏览器端的提交情况与服务器实际验证响应做对比。Google 的 reCAPTCHA 验证文档 明确指出,验证应在服务端完成,且响应 token 有时效性且为一次性使用。过期 token 或在验证后被重复使用的 token,是不同于“解题服务没产生 token”的问题。
在浏览器侧排查时,Chrome Network 面板指南 展示了如何检查请求与响应。只检查你有权限的页面上的相关操作;当一份经过脱敏的请求摘要就足够时,不要导出整段已登录会话。
提供一份简明、已脱敏的记录,使其能定位错误发生的阶段。
包含任务类型、任务 ID(若存在)、大致请求时间及时区、精确错误码与错误描述,以及该行为是否可复现。说明在错误出现前,页面或配置是否发生变动。标明你是否已经对照过当前任务文档检查过请求。
不要在公共工单中粘贴 CapSolver API key、完整 session cookies、完整解题 token 或无关的个人数据。OWASP 日志记录指南 解释了为什么应排除或保护身份认证与会话信息。若诊断确实需要额外敏感信息,请使用合适的支持渠道提交。
当你仍不确定页面到底使用了哪些输入参数时,参数识别操作指南 会有所帮助。如果确认输入已经匹配,但仍持续出现同样错误,请将这一事实一并告知,而不是把尚未证实的猜测当作结论提交。
面对 ERROR_CAPTCHA_UNSOLVABLE 的务实做法是:先定位失败阶段,验证当前输入,在此基础上做出有限的重试决策,并在失败持续时保留有价值的证据。
将 CapSolver 的任务响应与应用自身的执行结果结合起来看,就能清晰地区分“解题未成功”和“解题成功但后续集成失败”两类问题。
先从一种被支持的挑战类型和一条经过确认的请求开始,等到合规流程稳定产出预期结果后,再逐步扩展。
问:ERROR_CAPTCHA_UNSOLVABLE 是否总是意味着 sitekey 错了?
不是。该错误表示本次识别尝试未成功。需要检查输入,但不要仅凭错误码就认定是某个特定参数不匹配。
问:遇到该错误会扣费吗?
当前官方错误表明:ERROR_CAPTCHA_UNSOLVABLE 不扣费。该说明只适用于这一特定错误,而非所有失败的工作流。具体任务的计费问题应结合账户记录及支持渠道确认。
问:出现终止性错误后还要一直轮询吗?
不要把“已报错”当作“仍在处理中”。新的一次解题尝试,与对已有任务结果的查询,是两件不同的操作。
问:为什么已有解题结果,我的表单仍然提交失败?
“已有解题结果”并不等于“应用已接受”。需要检查对应页面状态、结果处理逻辑以及你可控范围内的服务端验证响应。
问:当该错误反复出现时,第一步最好做什么?
确认准确的错误信息,对比当前页面输入与任务文档,并保存一份去敏的任务记录。当不存在合理的修正方案或新的有效观测时,应停止重复尝试。

Emma Foster
Machine Learning Engineer
Where machine learning meets practical AI tooling.
关于作者