CAPSOLVER
博客
如何在CrewAI代理中解决Cloudflare人机验证

如何在CrewAI代理中解决Cloudflare Turnstile问题

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

30-Jul-2026

Cloudflare Turnstile 正在迅速取代现代网络应用中的传统 CAPTCHA。当 CrewAI 多代理工作流在网页研究、数据收集或自动化工作流中遇到受 Turnstile 保护的页面时,整个团队都会停滞。CapSolver 的 capsolver-core SDK 可在 2-5 秒内解决 Turnstile 挑战,与 CrewAI 的工具系统无缝集成,确保您的多代理流水线持续运行。

快速摘要

  • Cloudflare Turnstile 部署在 25%+ 的现代网页应用中,成为增长最快的验证系统
  • CapSolver 通过 cloudflare 任务类型在 2-5 秒内解决 Turnstile —— 比 reCAPTCHA 更快
  • 与 CrewAI 的集成使用 @tool 装饰器包装 CapSolver 的异步执行器
  • 仅需 website_urlwebsite_key(以 0x 开头的 Turnstile 站点密钥)
  • 支持 Token 模式(无需浏览器)和 Browser 模式(自动检测并填写实时页面)

为什么 CrewAI 代理会遇到 Cloudflare Turnstile

Cloudflare Turnstile 已成为越来越多网页的默认验证系统。与 reCAPTCHA 不同,Turnstile 作为“非交互式挑战”运行——它在后台运行,仅在风险评分升高时显示可见的小部件。这使得代理更难检测和处理,相比传统的复选框 CAPTCHA。

CrewAI 代理在 SaaS 平台、API 文档网站、现代电商平台(尤其是 Shopify)、金融科技门户和内容管理系统中会遇到 Turnstile。Cloudflare 的 Turnstile 文档 表明,该系统每月处理数十亿次挑战,覆盖数百万个网站,采用率年增长超过 40%。

对于执行网页研究或数据收集的 CrewAI 团队,Turnstile 会毫无预警地出现——昨天能正常加载的页面可能在今天启用 Cloudflare 的机器人管理后部署了 Turnstile。CapSolver 的 cloudflare 任务类型可以透明处理这种情况。

开始前需要准备的内容

bash 复制代码
# CapSolver 核心引擎
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# CapSolver 代理工具
pip install git+https://github.com/capsolver-ai/capsolver-agent.git
# CrewAI
pip install crewai crewai-tools
bash 复制代码
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"

步骤 1 — 为 CrewAI 创建一个解决 Turnstile 的工具

python 复制代码
import asyncio
from crewai.tools import tool
from capsolver_agent.schema import create_executor

executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")

@tool("解决 Cloudflare Turnstile")
def solve_turnstile(website_url: str, website_key: str) -> str:
    """解决 Cloudflare Turnstile 挑战并返回验证令牌。
    
    在网站受 Cloudflare Turnstile 保护时使用此工具。
    website_key 以 '0x' 开头,可以在页面的 cf-turnstile div 元素的 data-sitekey 属性中找到。
    
    参数:
        website_url: 受 Turnstile 保护的页面完整 URL
        website_key: Turnstile 站点密钥(以 0x 开头)
    
    返回:
        要与请求一起提交的 cf-turnstile-response 令牌
    """
    result = asyncio.run(executor.execute("solve_captcha", {
        "captcha_type": "cloudflare",
        "website_url": website_url,
        "website_key": website_key
    }))
    
    if result["success"]:
        return f"Turnstile 在 ~3 秒内解决。令牌: {result['solution']['token']}"
    return f"解决失败: {result['error']}"

步骤 2 — 构建具有 Turnstile 能力的 CrewAI 代理

python 复制代码
from crewai import Agent, Task, Crew, Process

# 具备解决 Turnstile 的代理
researcher = Agent(
    role="网页研究专家",
    goal="访问受 Cloudflare 保护的网站并收集数据",
    backstory="""你研究受 Cloudflare Turnstile 保护的网站。 
    当你遇到 Turnstile 挑战(通过 cf-turnstile 元素或 Cloudflare 挑战页面识别时),使用页面 URL 和站点密钥(以 0x 开头)调用 solve_turnstile 工具。将返回的令牌作为 cf-turnstile-response 提交。""",
    tools=[solve_turnstile],
    verbose=True
)

# 需要解决 Turnstile 的任务
research_task = Task(
    description="""访问位于 {url} 的受 Cloudflare 保护的页面。
    Turnstile 站点密钥是 {site_key}。
    解决 Turnstile 挑战并报告令牌。""",
    expected_output="访问受保护资源的 Turnstile 令牌",
    agent=researcher
)

crew = Crew(agents=[researcher], tasks=[research_task], process=Process.sequential)
result = crew.kickoff(inputs={"url": "https://example.com", "site_key": "0x4AAAAAAA..."})

步骤 3 — 识别 Turnstile 参数

Turnstile 站点密钥位于页面 HTML 中:

html 复制代码
<!-- Turnstile 小部件 -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAABkMYinukE8nzYS"></div>

<!-- 或在 JavaScript 中 -->
<script>
  turnstile.render('#container', { sitekey: '0x4AAAAAAABkMYinukE8nzYS' });
</script>

CapSolver 浏览器扩展 可以在任何页面上自动检测 Turnstile 参数。Cloudflare Turnstile 解决指南 提供了详细的实现模式。

步骤 4 — 在浏览器模式下处理 Turnstile

对于使用 Playwright 驱动浏览器的 CrewAI 代理,使用 solve_on_page() 进行自动检测:

python 复制代码
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright

async def solve_turnstile_on_page(url: str):
    cap = create_capsolver(api_key="YOUR_CAPSOLVER_API_KEY")
    
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto(url)
        
        # 自动检测并解决 Turnstile
        results = await cap.solve_on_page(page)
        for r in results:
            if r.solution:
                print(f"Turnstile 已解决并填写: {r.filled}")
        
        await browser.close()
    await cap.aclose()
特性 Turnstile 与 reCAPTCHA
解决时间 2-5 秒(更快)
每次解决成本 每 1000 次 1-2 美元
是否需要浏览器 否(Token 模式有效)
可见小部件 有时(基于风险)
令牌字段名称 cf-turnstile-response

领取您的优惠码:在 CapSolver 仪表板 使用代码 WEBS,每次充值可额外获得 5% 奖励。

结论

在 CrewAI 中解决 Cloudflare Turnstile 需要使用 @tool 装饰器包装 CapSolver 的执行器,并设置 captcha_type: "cloudflare"。Turnstile 解决速度更快(2-5 秒)且成本更低,使其成为高吞吐量 CrewAI 工作流的高效选择。CapSolver 通过与 reCAPTCHA 相同的 API 透明处理 Turnstile,因此您的 CrewAI 工具可以在不更改代码的情况下跨所有 CAPTCHA 类型工作。

常见问题

Cloudflare Turnstile 比 reCAPTCHA 更难解决吗?

不。Turnstile 实际上更容易解决(2-5 秒 vs reCAPTCHA v2 的 5-12 秒),并且每次解决的成本更低。CapSolver API 通过相同的接口处理两者——只需更改 captcha_type 参数即可。

Turnstile 站点密钥是什么样的?

Turnstile 站点密钥始终以 0x 开头,后跟字母数字字符,例如 0x4AAAAAAABkMYinukE8nzYS。它们位于 div.cf-turnstile 元素的 data-sitekey 属性中。

一个 CrewAI 工具可以同时处理 Turnstile 和 reCAPTCHA 吗?

可以。创建一个统一的工具,接受 captcha_type 作为参数。执行器会根据类型值路由到正确的求解器——cloudflare 用于 Turnstile,reCaptchaV2reCaptchaV3 用于 reCAPTCHA。

在没有浏览器的情况下可以解决 Turnstile 吗?

可以。Token 模式只需 website_urlwebsite_key。无需浏览器、无需 Playwright、无需页面渲染。直接返回令牌,并将其作为 cf-turnstile-response 提交到 HTTP 请求中。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多