
Ethan Collins
Pattern Recognition Specialist

capsolver-core 适用于Playwright脚本,capsolver-agent 适用于工具调用代理,capsolver-mcp 适用于MCP兼容客户端。投标公告数据提取自动化应作为具有明确状态转换的监控代理步骤构建。 CapSolver 应作为文档化的代理功能连接:浏览器或模型检测到验证挑战时,经批准的工具处理它,代理仅在原始用户授权任务仍有效时恢复。官方CapSolver AI文档描述了三个实用层:CapSolver for AI Agents 用于架构,Core SDK浏览器模式 用于Playwright流程,agent工具模式 用于模型控制调用,以及 MCP服务工具 用于通过Model Context Protocol发现工具的客户端。本文将这些文档转化为具有代码、停止规则和日志字段的生产级投标公告数据提取自动化工作流。
CapSolver AI文档描述了三个层。根据您的所有权模型选择最低层:当您的代码控制浏览器时使用Core SDK,当模型决定何时调用工具时使用Agent工具,当您的AI客户端应自动发现解决工具时使用MCP服务。
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密钥保留在环境配置中,避免将其放在提示、日志、截图或文章示例中。
最安全的投标公告数据提取自动化流程将发现、详细信息提取、附件解析和审查分开。验证码处理应位于页面访问和提取之间,而不是在数据已与未经验证的内容混合之后。
states = [
"discover_notice_list",
"open_notice_detail",
"challenge_detected",
"resume_after_solution",
"extract_public_fields",
"review_or_stop",
]
required_fields = ["notice_id", "buyer", "deadline", "source_url"]
这种结构有助于代理准确报告停止位置。它还保持了提取层与挑战层的独立性。
当您的投标公告数据提取自动化流程已拥有Playwright页面时,使用 capsolver-core。官方Core SDK路径是检测、读取验证码信息、解决并将其令牌填写回页面。当页面结构动态时,全功能浏览器调用很有用。
import asyncio
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
TARGET_URL = "https://example.gov/tenders/search"
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-agent。Agent Tools指南 通过 get_all_tools() 暴露工具定义,并通过 create_executor() 将模型工具调用路由。
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": "继续批准的浏览器任务。如果出现CAPTCHA,请调用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),
})
对于投标公告数据提取自动化,将此工具路径绑定到审查策略。模型可以请求工具,但您的应用程序决定允许的URL范围、最大尝试次数以及结果是否可用于继续。
领取您的CapSolver优惠码
立即提升您的自动化预算!
在充值CapSolver账户时使用优惠码 CAP26,每次充值可获得 5% 的额外奖励 —— 没有限制。
现在在您的 CapSolver仪表板 中领取
在调用任何挑战工具之前,确认用户已授权任务,目标在批准的域名列表内,并且访问的数据是公开的或以其他方式允许的。投标公告数据提取自动化工作流不应将技术能力视为权限。
使用小的重试预算。一次浏览器状态重试和一次冷却重试通常就足够了。重复的挑战事件应创建审查工单,而不是继续静默进行。
记录URL、时间戳、挑战类型、CapSolver包路径、尝试次数、结果状态和最终页面状态。除非您的策略明确允许,否则不要存储无关的页面内容、凭据、会话密钥或个人数据。
对于投标公告数据提取自动化,保持运行合法且有证据支持:尊重 HTTP状态码行为、可访问性要求、隐私风险管理 和 公共数据管理。
强大的投标公告数据提取自动化文章应展示实际的实现路径,而强大的生产工作流也应如此。实际选择很简单:使用 capsolver-core 进行代码拥有的浏览器自动化,capsolver-agent 进行工具调用代理,capsolver-mcp 进行MCP兼容客户端。保持挑战处理的限制、记录和与合法用户授权工作的关联。当您的团队准备好向代理工作流添加此恢复层时,请从 CapSolver 和官方AI代理文档开始。
当您的应用程序拥有浏览器代码时使用 capsolver-core,当模型应调用工具时使用 capsolver-agent,当AI客户端应通过MCP发现工具时使用 capsolver-mcp。
不。模型可以请求工具调用,但应用程序应强制执行范围、重试限制和停止条件。
不可以。CAPTCHA处理不授予权限。仅用于合法、合理、用户授权的工作流,并尊重网站条款和数据权利。
记录源URL、挑战类型、工具路径、尝试次数、结果状态和最终页面状态。不要在日志中包含凭据和无关的页面内容。