
Ethan Collins
Pattern Recognition Specialist

您的AI代理在验证屏幕上停止运行。页面对您加载了,但代理报告结果为空。这几乎发生在每个接触开放网络的AI代理上。本指南解释了为什么AI代理在Cloudflare Turnstile上被阻止,以及如何正确解决。本文面向在授权目标上运行代理的开发人员和自动化工程师。您将了解原因、可行的代码路径和明确的合规限制。
AI代理是能够自主规划和执行任务的软件。它读取目标,将其分解为步骤,并通过工具执行这些步骤。浏览器通常是这些工具之一。ChatGPT代理模式和Claude的电脑使用方式都是如此。
代理推理能力很强。它可以编写代码、总结页面并填写表单。但它通过自动化浏览器进行浏览。这种浏览器与人类的浏览器完全不同。而这种差异正是大多数失败的起点。这一类别发展迅速。根据Gartner预测,到2026年底,40%的企业应用将包含特定任务的AI代理,较2025年的不到5%大幅增长。更多代理意味着更多代理遇到同样的障碍。
AI代理在实时网站上失败的方式有几种可重复的模式。以下模式几乎出现在每个框架中。
这些不是某个产品的错误。它们是AI代理在受保护网站上的能力差距。当AI代理卡在Cloudflare Turnstile时,通常会遇到这三个障碍之一。
Cloudflare位于大量网站的前端。根据W3Techs的数据,Cloudflare被大约五分之一的网站使用,这意味着广泛浏览的代理会不断遇到它。该公司多年来一直在学习如何区分真实浏览器和自动化浏览器。多个信号共同作用,而AI代理往往同时失败。
每个真实浏览器都会报告一组一致的信号。屏幕尺寸、字体、GPU、时区和语言都保持一致。自动化浏览器通常报告缺失或矛盾的信息。用户代理声称是Chrome,而TLS握手显示的却不同。Cloudflare在毫秒内就能检测到这种不匹配。
真实用户会滚动、暂停并以不规则的曲线移动鼠标。代理加载页面并立即提取文本。这种速度本身就是一种标志。Cloudflare的Turnstile通过工作量证明、空间证明和Web API探测来检测浏览器特征和人类行为。高效代理会因过于干净而失败。
大多数代理运行在云基础设施上。这些数据中心IP范围已被详细记录并受到严厉惩罚。即使其他一切看起来都正常,来自已知机器人托管范围的请求也会引起怀疑。
当其他信号不确定时,Cloudflare会发出挑战。Turnstile是这种挑战的现代形式。它用静默评估取代了旧的图像拼图。对人类来说,这通常是不可见的。对卡在Cloudflare Turnstile的AI代理来说,没有可点击的东西,也没有明显的通过方式。
人们经常混淆这两个。它们需要不同的处理方式,所以在编写任何代码之前明确区分非常重要。
Turnstile是一个嵌入在表单中的小部件。您通常在登录、注册或结账时看到它。完整的挑战是一个单独的全屏中间页。它显示"Just a moment..."屏幕并返回带有cf_clearance cookie要求的403状态码。了解您面对的是哪一种决定了您的整个方法。下表列出了实际差异。
| 因素 | Cloudflare Turnstile | 完整的Cloudflare挑战 |
|---|---|---|
| 出现位置 | 表单中的嵌入小部件 | 全屏中间页 |
| 可见标志 | 小复选框或不可见 | "Just a moment..."屏幕,403状态码 |
| 所需内容 | websiteURL + websiteKey |
目标URL + 稳定代理 + 用户代理 |
| 是否需要代理 | 否 | 是(静态或稳定代理) |
| 输出 | 响应令牌 | cf_clearance cookie和令牌 |
| 典型解决时间 | 1–20秒 | 2–20秒 |
将挑战误认为Turnstile是最常见的错误。小部件方法无法为全屏阻止生成可用cookie。
错误的本能是让自动化浏览器更逼真。修补这种设置是在与一个不断更新的检测系统进行徒劳的竞赛。实际路径是将验证步骤从代理的主要逻辑中分离出来。让专用服务生成令牌,然后让代理提交它。
这就是像CapSolver这样的CAPTCHA求解服务适合工作流的地方。它为验证步骤生成有效令牌,使代理能够继续其任务。流程分为三部分:读取参数,请求令牌,注入令牌。
Turnstile需要两个输入:页面URL和站点密钥。站点密钥存在于Turnstile元素的页面HTML中。您可以通过渲染的DOM读取它,或通过浏览器扩展提取。详细过程请参见如何识别Cloudflare Turnstile参数的指南。
使用URL和站点密钥创建任务。Turnstile是客户端检查,因此此处不需要代理。任务类型是AntiTurnstileTaskProxyLess。然后轮询结果,直到状态变为就绪。
# pip install requests
import requests
import time
api_key = "YOUR_API_KEY"
site_key = "0x4XXXXXXXXXXXXXXXXX" # 目标页面的站点密钥
site_url = "https://www.yourwebsite.com"
def solve_turnstile():
payload = {
"clientKey": api_key,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteKey": site_key,
"websiteURL": site_url,
"metadata": {
"action": "" # 可选,如果存在data-action属性则匹配
}
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
task_id = res.json().get("taskId")
if not task_id:
print("创建任务失败:", res.text)
return None
while True:
time.sleep(1)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": api_key, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("errorId"):
print("求解失败:", result)
return None
token = solve_turnstile()
print(token)
完整的参数参考,包括可选的action和cdata字段,请参见Cloudflare Turnstile API指南。
令牌是一次性使用。将其放入预期的响应字段,通常是cf-turnstile-response,然后在代理的浏览器会话中提交表单。每次提交都请求一个新令牌。不要缓存或重复使用。
# 在代理的浏览器会话中(Playwright示例)
page.evaluate(
"""(token) => {
const field = document.querySelector('[name="cf-turnstile-response"]');
if (field) field.value = token;
}""",
token,
)
# 然后触发表单的正常提交操作
如果您的代理遇到"Just a moment..."屏幕,请切换到AntiCloudflareTask类型。这个任务需要静态或稳定代理和真实的用户代理。它会返回一个cf_clearance cookie,然后您需要将其附加到会话中。设置过程,包括何时传递页面HTML,详见Cloudflare挑战指南。旋转代理会破坏此流程,因此请求过程中保持IP稳定。
令牌可能成功返回但仍被拒绝。这些是常见原因。
AntiTurnstileTaskProxyLess。全屏页面需要AntiCloudflareTask。data-action,请在metadata中传递它。如需更广泛的技巧和工具分析,这篇关于如何解决Turnstile CAPTCHA的文章涵盖了当前方法。使用浏览器框架的团队可能也会发现这篇关于AI工作流中的Playwright stealth的文章对解决指纹问题很有用。
这与代码一样重要。仅在您拥有或明确被授权自动化的网站上处理验证。良好的使用案例包括您自己的表单的QA测试、您有权访问的数据监控和授权的公共数据收集。在构建之前,请阅读每个目标的使用条款。遵守robots规则和速率限制。绝不要用这些方法访问私人账户、收集受保护的个人数据或违背网站所有者的明确声明。即使AI代理处理了Turnstile,它仍需遵守与人类操作员相同的规则。保持工作授权可以保护您和项目。
AI代理卡在Cloudflare Turnstile上是一个可预测的问题,有明确的解决方案。障碍来自于指纹、行为和IP信号,而不是代理的智能。修复方法是将验证从主逻辑中分离出来:读取站点密钥,从求解服务请求令牌,注入并提交。根据您实际遇到的小部件或全屏页面匹配任务类型。然后确保每次运行都在授权范围内。这样处理,您的代理就能顺利通过障碍,而无需走捷径。
如果您的代理今天卡住了,请从Turnstile API指南开始,确认挑战类型,并将三步流程集成到您的工作流中。
Cloudflare Turnstile与“Just a moment...”页面是否相同?
不。Turnstile是表单中的小部件。"Just a moment..."页面是完整的Cloudflare挑战。它们需要不同的任务类型和不同的设置,因此首先要确定您遇到的是哪一种。
处理Turnstile是否需要代理?
对于Turnstile小部件本身不需要。它是客户端检查,因此可以使用无代理任务类型。全屏挑战不同,确实需要静态或稳定代理。
为什么我的令牌即使求解成功也会被拒绝?
最常见的原因是令牌重复使用、用户代理不匹配或任务类型错误。Turnstile令牌是一次性使用,因此每次提交都请求一个新令牌。
我的AI代理能否在其现有的浏览器会话中完成此操作?
可以。从求解服务请求令牌,然后在代理的浏览器会话中注入到预期的响应字段,再提交表单。
以这种方式处理Cloudflare Turnstile是否合法?
这取决于目标和您的授权。只在您拥有或被允许自动化的网站上使用,遵守每个网站的使用条款,尊重速率限制。授权是使工作合法的关键。
学习如何使用 Hermes Agent 和 CapSolver 在人工智能浏览器自动化工作流程中解决验证码。本指南解释了如何集成 CapSolver 以在自动化浏览环境中自动处理重新验证码以及其他现代验证码系统,而无需编写复杂代码。

探索如何利用大模型(LLM)驱动的 AI 自动化基础设施,革新验证码识别,提升业务流程效率,减少人工干预。通过先进的验证码解决方案,优化您的自动化运营。
