CAPSOLVER
博客
CrewAI 验证码求解器:代理工具代码指南

CrewAI 验证码解决工具:代理工具代码指南

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

13-Jul-2026

TL;DR

  • CrewAI 验证码求解器工作应使用 CapSolver 的 AI 代理堆栈作为显式的恢复层,而不是隐藏的重试逻辑。
  • capsolver-core 适用于 Playwright 脚本,capsolver-agent 适用于工具调用代理,capsolver-mcp 适用于 MCP 兼容客户端。
  • 安全模式是检测、读取参数、有限重试一次求解、填写后,再记录请求状态以供审查。
  • 代理应在任务范围变化、页面要求受限访问或挑战处理无进展时停止。

引言

CrewAI 验证码求解器工作需要在规划、浏览器控制和审查之间建立代码级工具边界。 CapSolver 应作为已记录的代理能力进行配置:浏览器或模型检测到验证挑战时,经批准的工具处理它,代理仅在原始用户授权任务仍然有效时才恢复。官方 CapSolver AI 文档描述了三个实用层:CapSolver for AI Agents 用于架构,Core SDK 浏览器模式 用于 Playwright 流程,agent tool schemas 用于模型控制的调用,以及 MCP 服务工具 用于通过模型上下文协议发现工具的客户端。本文将这些文档转化为具有代码、停止规则和日志字段的生产级 CrewAI 验证码求解工作流。

使用官方 CapSolver AI 包

CapSolver AI 文档描述了三个层。使用与您的所有权模型匹配的最低层:当您的代码控制浏览器时使用 Core SDK,当模型决定何时调用工具时使用 Agent 工具,当您的 AI 客户端应自动发现求解工具时使用 MCP 服务。

bash 复制代码
pip install "capsolver-core[playwright] @ git+https://github.com/capsolver-ai/capsolver-core.git"
pip install git+https://github.com/capsolver-ai/capsolver-agent.git
pip install "capsolver-mcp[browser] @ git+https://github.com/capsolver-ai/capsolver-mcp.git"
playwright install chromium
export CAPSOLVER_API_KEY="your-capsolver-api-key"

简介和快速入门 解释了包的角色:capsolver-core 暴露引擎,capsolver-agent 将其封装为工具,capsolver-mcp 将相同功能暴露给 MCP 客户端。将 API 密钥保留在环境配置中,避免将其放在提示、日志、截图或文章示例中。

CrewAI 角色设计

CrewAI 实现应为每个角色分配狭窄的责任。规划者识别页面是否被验证挑战阻止。浏览器工作者负责导航。CapSolver 工具处理者负责挑战步骤。审查者负责在运行不确定时做出最终决策。

python 复制代码
crew_state = {
    "task_id": "lead-enrichment-042",
    "allowed_domains": ["example.com"],
    "captcha_attempts": 0,
    "max_captcha_attempts": 1,
    "final_state": "planning",
}

def may_call_capsolver(state, current_url):
    if state["captcha_attempts"] >= state["max_captcha_attempts"]:
        return False
    return any(domain in current_url for domain in state["allowed_domains"])

这个小的门控机制保持了 CrewAI 验证码求解器行为的可见性。只有在页面在范围内且重试预算仍可用时,Crew 才能请求帮助。

模型控制决策的代理工具模式

当模型应选择何时需要处理挑战时,使用 capsolver-agent代理工具指南 通过 get_all_tools() 暴露工具定义,并通过 create_executor() 路由模型工具调用。

python 复制代码
import json
from openai import OpenAI
from capsolver_agent.schema import create_executor, get_all_tools

client = OpenAI()
executor = create_executor(api_key="YOUR_CAPSOLVER_KEY", default_timeout=120)
tools = [tool.to_openai_function() for tool in get_all_tools()]

messages = [{
    "role": "user",
    "content": "继续批准的浏览器任务。如果出现验证码,请调用一次 CapSolver 工具并报告结果。"
}]

async def run_one_turn():
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=tools,
    )

    for call in response.choices[0].message.tool_calls or []:
        args = json.loads(call.function.arguments)
        result = await executor.execute(call.function.name, args)
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": json.dumps(result),
        })

对于 CrewAI 验证码求解器,将此工具路径绑定到审查者策略。模型可以请求工具,但您的应用程序决定允许的 URL 范围、最大尝试次数以及结果是否可用于继续。

浏览器控制代理的 Core SDK 模式

当您的 CrewAI 验证码求解流程已拥有 Playwright 页面时,使用 capsolver-core。官方 Core SDK 路径是检测、读取验证码信息、求解并将其令牌填回页面。当页面结构动态时,全功能浏览器调用很有用。

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

TARGET_URL = "https://example.com/approved-workflow"

async def run_agent_step():
    async with async_playwright() as pw:
        browser = await pw.chromium.launch()
        page = await browser.new_page()
        await page.goto(TARGET_URL, wait_until="domcontentloaded")

        async with create_capsolver(api_key="YOUR_CAPSOLVER_KEY") as cap:
            captcha_types = await cap.detect(page)
            if not captcha_types:
                return "continue_without_challenge"

            results = await cap.solve_on_page(page)
            solved = [r for r in results if r.solution and not r.error]
            if not solved:
                return "stop_for_review"

        return "resume_original_authorized_task"

asyncio.run(run_agent_step())

重要的工程细节是返回值,而不仅仅是令牌。您的代理应在原始任务仍然合法、合理和用户授权时继续。当页面要求私人、受限、敏感或未经授权的数据时,应停止。

领取您的 CapSolver 奖励代码

立即提升您的自动化预算!
在充值 CapSolver 账户时使用奖励代码 CAP26,每次充值均可获得 5% 的额外奖励——无限制。
现在在您的 CapSolver 仪表板 中领取
奖励代码

应该包含在代理循环中的防护措施

范围检查

在调用任何挑战工具之前,确认用户授权了任务,目标在批准的域名列表内,并且访问的数据是公开的或以其他方式允许的。CrewAI 验证码求解工作流不应将技术能力视为权限。

重试限制

使用小的重试预算。一次浏览器状态重试和一次冷却重试通常就足够了。重复的挑战事件应创建审查工单,而不是继续静默进行。

可观察性

捕获 URL、时间戳、挑战类型、CapSolver 包路径、尝试次数、结果状态和最终页面状态。除非您的策略明确允许,否则不要存储无关的页面内容、凭据、会话密钥或个人数据。

对于 CrewAI 验证码求解器,保持运行合法且有证据支持:尊重 HTTP 状态码行为可访问性要求隐私风险管理公共数据管理

结论

强大的 CrewAI 验证码求解文章应展示实际的实现路径,强大的生产工作流也应如此。实际选择很简单:使用 capsolver-core 进行代码拥有的浏览器自动化,capsolver-agent 进行工具调用代理,capsolver-mcp 进行 MCP 兼容客户端。保持挑战处理的边界、记录和与合法用户授权工作的关联。当您的团队准备好将此恢复层添加到代理工作流时,从 CapSolver 和官方 AI 代理文档开始。

FAQ

AI 代理应首先使用哪个 CapSolver 包?

当您的应用程序拥有浏览器代码时使用 capsolver-core,当模型应调用工具时使用 capsolver-agent,当 AI 客户端应通过 MCP 发现工具时使用 capsolver-mcp

模型应决定每次验证码重试吗?

不。模型可以请求工具调用,但应用程序应强制执行范围、重试限制和停止条件。

此工作流可以用于私有或受限数据吗?

不可以。验证码处理不授予权限。仅用于合法、合理、用户授权的工作流,尊重网站条款和数据权利。

应记录哪些内容以供审查?

记录源 URL、挑战类型、工具路径、尝试次数、结果状态和最终页面状态。不要在日志中包含凭据和无关的页面内容。

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

更多