CAPSOLVER
博客
如何在 OpenAI 代理 SDK 中解决 reCAPTCHA

如何在 OpenAI 代理 SDK 中解决 reCAPTCHA

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

28-Jul-2026

OpenAI 代理 SDK 提供了一个生产就绪的框架,用于构建具有工具调用功能的 AI 代理。当这些代理与受 reCAPTCHA 保护的网站交互时,需要一种编程方式清除验证挑战。CapSolver 的 capsolver-agent 包通过 @function_tool 装饰器与 OpenAI 代理 SDK 集成,使您的代理能够作为其自主工作流的一部分解决 reCAPTCHA v2 和 v3 挑战。

TL;DR

  • OpenAI 代理 SDK 使用 @function_tool 注册可调用工具——CapSolver 原生符合这一模式
  • capsolver-agentexecute_tool() 函数将解决过程封装为一个与 SDK 兼容的异步调用
  • 支持 reCAPTCHA v2(复选框和不可见)、reCAPTCHA v3(基于分数)和企业版
  • 令牌模式无需浏览器——只需网站密钥和 URL
  • 代理根据任务上下文自主决定何时调用 CAPTCHA 解决

为什么 OpenAI 代理需要 reCAPTCHA 解决

OpenAI 代理 SDK 使开发人员能够构建使用工具执行多步骤任务的代理。当代理的任务涉及网络交互——访问登录后的数据、提交表单或从受保护页面收集信息时,reCAPTCHA 挑战会阻止进度。代理可以推理下一步该做什么,但如果没有解决工具,它无法生成继续所需的验证令牌。

reCAPTCHA 在代理需要访问的网站上尤为常见:登录门户、受速率限制的数据 API、政府数据库和 SaaS 平台。 Google 的 reCAPTCHA 文档 指出,全球有超过 500 万个网站使用 reCAPTCHA,使其成为代理最可能遇到的验证挑战。

CapSolver 的架构与 OpenAI 代理 SDK 的设计完美契合:代理决定 要做什么(包括何时解决 CAPTCHA),而 CapSolver 通过其 AI 服务处理 解决它。这种职责分离保持了代理逻辑的简洁性,同时增加了清除验证的能力。

开始前需要准备的内容

安装所需包:

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

# OpenAI 代理 SDK
pip install openai-agents

设置环境变量:

bash 复制代码
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"

您需要一个 CapSolver 账户 并拥有积分。SDK 当前支持 reCAPTCHA v2、reCAPTCHA v3(包括企业版)和 Cloudflare Turnstile——覆盖代理最常遇到的验证类型。

第 1 步 —— 将 CAPTCHA 解决注册为函数工具

操作内容

OpenAI 代理 SDK 使用 @function_tool 定义代理可以调用的工具。将 CapSolver 的执行器包装成这种模式:

python 复制代码
from agents import Agent, Runner, function_tool
from capsolver_agent.schema import execute_tool

@function_tool
async def solve_recaptcha(
    website_url: str, 
    website_key: str, 
    captcha_type: str = "reCaptchaV2"
) -> str:
    """在网站上解决 reCAPTCHA 挑战并返回验证令牌。
    
    在需要绕过网页上的 reCAPTCHA 验证时使用此工具。
    
    参数:
        website_url: 包含 reCAPTCHA 的页面完整 URL
        website_key: reCAPTCHA 网站密钥(在 data-sitekey 属性中找到)
        captcha_type: 可为 'reCaptchaV2' 或 'reCaptchaV3'(默认: reCaptchaV2)
    
    返回:
        要作为 g-recaptcha-response 提交的已解决 reCAPTCHA 令牌
    """
    result = await execute_tool("solve_captcha", {
        "captcha_type": captcha_type,
        "website_url": website_url,
        "website_key": website_key
    }, api_key="YOUR_CAPSOLVER_API_KEY")
    
    if result["success"]:
        return f"reCAPTCHA 已解决。令牌: {result['solution']['token']}"
    return f"解决失败: {result['error']}"

capsolver-agent 中的 execute_tool() 函数是一个单次异步调用,处理完整的解决生命周期——创建任务、轮询结果并返回结构化输出。它专门设计用于需要一次解决而无需构建完整执行器循环的场景。

为什么这很重要

OpenAI 代理 SDK 的 @function_tool 装饰器会自动生成模型需要的 JSON 模式。代理看到工具描述,理解何时使用它,并通过 SDK 内置的函数调用机制用正确的参数调用它。

需要避免的常见错误

  • 同步执行:OpenAI 代理 SDK 是异步的。始终使用 async def 定义工具函数,并使用 await 调用 CapSolver。
  • 缺少类型提示:SDK 从类型提示生成模式。为所有参数包含正确的类型注解。

第 2 步 —— 创建具有 reCAPTCHA 解决能力的代理

操作内容

构建一个包含 reCAPTCHA 解决工具的 OpenAI 代理:

python 复制代码
from agents import Agent, Runner

# 创建具有 CAPTCHA 解决能力的代理
captcha_agent = Agent(
    name="Web Access Agent",
    instructions="""您是一个帮助用户与网站交互的网络访问代理。当任务需要访问受 reCAPTCHA 保护的页面时,请使用 solve_recaptcha 工具获取验证令牌。 
    
    对于 reCAPTCHA v2: 使用 captcha_type='reCaptchaV2'
    对于 reCAPTCHA v3: 使用 captcha_type='reCaptchaV3'
    
    始终提供用户请求中的精确 website_url 和 website_key。""",
    tools=[solve_recaptcha]
)

# 运行代理
async def main():
    result = await Runner.run(
        captcha_agent,
        "我需要访问 https://example.com/login,它有 reCAPTCHA v2。"
        "网站密钥是 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI。"
        "请解决它并给我令牌。"
    )
    print(result.final_output)

import asyncio
asyncio.run(main())

代理处理请求,识别需要解决 reCAPTCHA,使用提供的参数调用工具,并将令牌返回给用户。

为什么这很重要

OpenAI 代理 SDK 自动处理对话循环、工具分发和结果集成。您只需定义一次工具,SDK 的运行时管理其调用的时间和方式。这比手动构建函数调用循环更简单。

第 3 步 —— 处理具有分数要求的 reCAPTCHA v3

操作内容

reCAPTCHA v3 是基于分数且不可见的——它需要 page_action 参数并返回一个带有相关分数的令牌。创建一个专用工具:

python 复制代码
@function_tool
async def solve_recaptcha_v3(
    website_url: str,
    website_key: str,
    page_action: str = "verify",
    min_score: float = 0.7
) -> str:
    """解决 reCAPTCHA v3(不可见、基于分数)挑战。
    
    当网站使用 reCAPTCHA v3 时使用此工具——没有可见的复选框,
    但网站在后台验证基于分数的令牌。
    
    参数:
        website_url: 页面的完整 URL
        website_key: reCAPTCHA v3 网站密钥
        page_action: 用于评分的操作名称(例如,'login'、'submit'、'verify')
        min_score: 最低可接受分数(0.0-1.0,默认 0.7)
    """
    result = await execute_tool("solve_captcha", {
        "captcha_type": "reCaptchaV3",
        "website_url": website_url,
        "website_key": website_key,
        "page_action": page_action,
        "min_score": min_score
    }, api_key="YOUR_CAPSOLVER_API_KEY")
    
    if result["success"]:
        return f"reCAPTCHA v3 以高分数解决。令牌: {result['solution']['token']}"
    return f"解决失败: {result['error']}"

reCAPTCHA v3 解决指南 解释了如何为不同网站识别正确的 page_action 参数。常见操作包括 loginsubmithomepageverify

第 4 步 —— 构建具有完整网络工作流的多工具代理

操作内容

将 reCAPTCHA 解决与其他工具结合,创建执行完整网络任务的代理:

python 复制代码
from agents import Agent, Runner, function_tool

@function_tool
async def solve_recaptcha(website_url: str, website_key: str, captcha_type: str = "reCaptchaV2") -> str:
    """解决 reCAPTCHA 并返回令牌。"""
    result = await execute_tool("solve_captcha", {
        "captcha_type": captcha_type,
        "website_url": website_url,
        "website_key": website_key
    }, api_key="YOUR_CAPSOLVER_API_KEY")
    if result["success"]:
        return f"令牌: {result['solution']['token']}"
    return f"失败: {result['error']}"

@function_tool
async def check_solver_balance() -> str:
    """检查剩余的 CAPTCHA 解决积分。"""
    result = await execute_tool("get_balance", {}, api_key="YOUR_CAPSOLVER_API_KEY")
    if result["success"]:
        return f"余额: ${result['balance']:.2f}"
    return "无法检查余额"

# 多功能代理
web_agent = Agent(
    name="自主网络代理",
    instructions="""您帮助用户访问可能受 reCAPTCHA 保护的网络资源。您可以解决 reCAPTCHA v2(可见复选框)和 v3(不可见基于分数)。如果用户询问成本,请在解决前检查余额。
    
    解决 reCAPTCHA 时:
    - v2: 使用 captcha_type='reCaptchaV2' 
    - v3: 使用 captcha_type='reCaptchaV3' 并在已知时包含 page_action
    
    清晰返回令牌,以便用户可以将其提交到表单中。""",
    tools=[solve_recaptcha, check_solver_balance]
)

async def run_web_agent(task: str):
    result = await Runner.run(web_agent, task)
    return result.final_output

这种模式适用于需要在单个会话中处理不同网站上多个 reCAPTCHA 版本的代理。

领取您的优惠码:在 CapSolver 仪表板 使用代码 WEBS,每次充值可获得额外 5% 的奖励。非常适合构建具有网络访问能力的 OpenAI 代理的开发人员。

第 5 步 —— 生产部署注意事项

对于具有 reCAPTCHA 解决功能的生产 OpenAI 代理:

python 复制代码
import os
from agents import Agent, Runner, function_tool
from capsolver_agent.schema import create_executor

# 带自定义设置的生产执行器
executor = create_executor(
    api_key=os.environ["CAPSOLVER_API_KEY"],
    default_timeout=90,      # 90 秒超时
    polling_interval=3       # 每 3 秒轮询一次
)

@function_tool
async def solve_recaptcha_production(
    website_url: str,
    website_key: str,
    captcha_type: str = "reCaptchaV2"
) -> str:
    """具有重试逻辑的生产级 reCAPTCHA 解决器。"""
    for attempt in range(3):
        result = await executor.execute("solve_captcha", {
            "captcha_type": captcha_type,
            "website_url": website_url,
            "website_key": website_key
        })
        if result["success"]:
            return f"已解决(尝试 {attempt+1})。令牌: {result['solution']['token']}"
        if attempt < 2:
            await asyncio.sleep(2)
    return f"三次尝试后失败: {result.get('error')}"

关键的生产注意事项:

  • 超时配置:根据代理的响应时间要求设置 default_timeout
  • 重试逻辑:网络问题和临时故障应触发重试,而不是立即失败
  • 余额监控:定期检查余额以避免因积分不足导致任务中止
  • 错误报告:返回清晰的错误信息,以便代理可以推理替代方案

CapSolver API 文档 涵盖了在生产环境中优化解决时间的其他配置选项。对于识别目标网站上的 reCAPTCHA 参数,CapSolver 浏览器扩展 提供了自动检测功能。

结论

将 reCAPTCHA 解决集成到 OpenAI 代理 SDK 中需要定义一个包装 CapSolver 的 @function_tool,然后将其分配给您的代理。SDK 的运行时会自动处理工具分发——代理决定何时需要 reCAPTCHA 解决并用适当的参数调用工具。CapSolver 提供了 AI 驱动的解决基础设施,为 reCAPTCHA v2、v3 和企业版生成有效令牌。

从单个 solve_recaptcha 工具开始,用您的代理在已知目标上测试它,然后添加 v3 支持和生产重试逻辑。OpenAI 代理 SDK 的异步架构与 CapSolver 的异步 API 自然契合,使集成干净且高效。

FAQ

OpenAI 代理 SDK 是否支持异步 CAPTCHA 解决?

是的。SDK 完全异步,CapSolver 的 execute_tool() 是异步函数。@function_tool 装饰器原生支持 async def 函数,因此 CAPTCHA 解决不会阻塞代理的事件循环。

代理能否通过此集成解决 reCAPTCHA 企业版?

是的。在参数中传递 enterprise: true。reCAPTCHA 企业版使用相同的 v2/v3 任务类型,但可能需要 s 令牌参数。CapSolver 通过同一 API 透明地处理企业版。

代理如何知道网站使用哪种 reCAPTCHA 版本?

在代理的指令中包含关于识别 v2 与 v3 的指导。或者在任务提示中提供 CAPTCHA 类型。reCAPTCHA 识别指南 解释了区别:v2 显示可见小部件,而 v3 通过脚本标签无形加载。

每次 reCAPTCHA 解决的成本是多少?

reCAPTCHA v2 每 1000 次解决约 2-3 美元,reCAPTCHA v3 每 1000 次解决约 1-2 美元。对于每会话解决 10 个 CAPTCHA 的代理,成本约为 0.02-0.03 美元/会话——与自主任务完成的价值相比可以忽略不计。

能否与 OpenAI 代理 SDK 的交接功能一起使用?

是的。您可以创建一个专门的“CAPTCHA 解决器”代理,并在主代理遇到验证挑战时将其交接给它。解决器代理解决 CAPTCHA 并将令牌返回给主代理。这保持了代理职责的清晰分离。

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

更多