CAPSOLVER
博客
如何在 Agno 中通过 CapSolver 集成解决验证码

如何在 Agno 中通过 CapSolver 集成解决验证码

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

13-Jan-2026

Agno 与 CapSolver 集成

随着人工智能驱动的自动化在现实工作流程中变得越来越实用,Agno 已经成为一种快速且以隐私为先的框架,用于构建自主的多智能体系统。当这些代理通过爬取、数据收集或自动浏览与网站交互时,验证码(CAPTCHA)常常成为一个问题。

CapSolver 通过允许 Agno 代理可靠地处理受 CAPTCHA 保护的页面,而不会中断自动化流程,从而解决了这个问题。Agno 和 CapSolver 的结合使在真实网站上构建可扩展、无需人工干预的自动化变得更加容易。


什么是 Agno?

Agno 是一个开源的多智能体框架和运行时,用于在您自己的基础设施内构建 AI 系统。它以性能和隐私为设计重点——没有外部控制平面,也没有数据离开您的环境。

Agno 的关键特性

  • 高性能:比许多代理框架更快且更节省内存
  • 隐私优先:完全自托管,对数据和执行有完全控制
  • 多智能体系统:智能体可以协作、专业化并协调任务
  • 模型灵活:支持 OpenAI、Anthropic、Google 等多个提供者
  • 生产就绪的运行时:包含基于 FastAPI 的运行时用于部署智能体
  • 丰富的工具:内置用于网络自动化、API、数据库等的工具
  • 持久化内存:智能体可以在会话之间保留上下文
    会话之间通过代理 RAG 和 20 多个向量存储保持记忆

核心架构

组件 描述
智能体 具有记忆、工具和模型集成的自主 AI 单元
团队 协同完成复杂任务的智能体组
工作流 用于可预测执行的结构化管道
AgentOS 用于生产部署的 FastAPI 运行时

什么是 CapSolver?

CapSolver 是一个领先的验证码解决服务,提供用于绕过各种验证码挑战的 AI 解决方案。凭借对多种验证码类型的支持和闪电般的响应速度,CapSolver 可无缝集成到自动化工作流中。

支持的验证码类型


为什么将 CapSolver 与 Agno 集成?

当构建与网站交互的 Agno 智能体时——无论是用于数据收集、自动化测试还是内容聚合——验证码挑战成为一个重大障碍。如需深入了解在自动化浏览器环境中解决验证码的详细内容,请查看我们的指南:如何在 Puppeteer 中使用 CapSolver 解决验证码。以下是集成的重要性:

  1. 不间断的智能体工作流:智能体可以在无需人工干预的情况下完成任务。有关网络爬虫中验证码的更多解决方案,请参考我们的文章:网络爬虫时解决验证码的最佳方法
  2. 保护隐私:Agno 和 CapSolver 都允许您保持对数据的控制
  3. 可扩展的自动化:处理多个并发智能体操作中的验证码挑战
  4. 成本效益:仅对成功解决的验证码付费
  5. 高成功率:所有支持的验证码类型都具有行业领先的准确性。

安装

首先,安装所需的包:

bash 复制代码
pip install agno
pip install requests

Agno 是模型无关的,并内置支持 23+ 个 LLM 提供者:

python 复制代码
# OpenAI
from agno.models.openai import OpenAIChat

# Anthropic Claude
from agno.models.anthropic import Claude

# Google Gemini
from agno.models.google import Gemini

# 以及许多其他...

为 Agno 创建自定义 CapSolver 工具

Agno 允许您创建自定义工具,智能体可以使用这些工具完成其任务。以下是创建处理验证码挑战的 CapSolver 工具的方法:

基本的 CapSolver 工具实现

python 复制代码
import requests
import time
from agno.tools import tool

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_captcha(
    website_url: str,
    website_key: str,
    captcha_type: str = "ReCaptchaV2TaskProxyLess"
) -> str:
    """
    使用 CapSolver API 解决验证码挑战。

    参数:
        website_url: 包含验证码的网站 URL
        website_key: 验证码的站点密钥
        captcha_type: 验证码类型 (ReCaptchaV2TaskProxyLess, ReCaptchaV3TaskProxyLess, AntiTurnstileTaskProxyLess)

    返回:
        验证码解决方案令牌
    """
    # 创建任务
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": captcha_type,
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"创建任务时出错: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    # 轮询结果
    for _ in range(60):
        time.sleep(2)

        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            solution = result.get("solution", {})
            return solution.get("gRecaptchaResponse") or solution.get("token")
        elif result.get("status") == "failed":
            return f"任务失败: {result.get('errorDescription')}"

    return "等待验证码解决方案超时"

解决不同类型的验证码

reCAPTCHA v2 解决方案

python 复制代码
import requests
import time
from agno.tools import tool

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_recaptcha_v2(website_url: str, website_key: str) -> str:
    """
    使用 CapSolver 解决 reCAPTCHA v2 挑战。

    参数:
        website_url: 包含 reCAPTCHA v2 的网站 URL
        website_key: reCAPTCHA 的站点密钥 (data-sitekey 属性)

    返回:
        g-recaptcha-response 令牌
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "ReCaptchaV2TaskProxyLess",
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    # 创建任务
    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    # 轮询结果
    for attempt in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return result["solution"]["gRecaptchaResponse"]
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "等待解决方案超时"

reCAPTCHA v3 解决方案

python 复制代码
import requests
import time
from agno.tools import tool

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_recaptcha_v3(
    website_url: str,
    website_key: str,
    page_action: str = "submit",
    min_score: float = 0.7
) -> str:
    """
    使用基于分数验证的 reCAPTCHA v3 解决方案。

    参数:
        website_url: 包含 reCAPTCHA v3 的网站 URL
        website_key: reCAPTCHA 的站点密钥
        page_action: reCAPTCHA v3 的动作参数
        min_score: 最低分数要求 (0.1 到 0.9)

    返回:
        g-recaptcha-response 令牌
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "ReCaptchaV3TaskProxyLess",
            "websiteURL": website_url,
            "websiteKey": website_key,
            "pageAction": page_action,
            "minScore": min_score
        }
    }

    # 创建任务
    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    # 轮询结果
    for attempt in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return result["solution"]["gRecaptchaResponse"]
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "等待解决方案超时"

Cloudflare Turnstile 解决方案

python 复制代码
import requests
import time
from agno.tools import tool

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_turnstile(website_url: str, website_key: str) -> str:
    """
    解决 Cloudflare Turnstile 挑战。

    参数:
        website_url: 包含 Turnstile 的网站 URL
        website_key: Turnstile 小部件的站点密钥

    返回:
        Turnstile 令牌
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "AntiTurnstileTaskProxyLess",
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    # 创建任务
    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    # 轮询结果
    for attempt in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return result["solution"]["token"]
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "等待解决方案超时"

Cloudflare 挑战(5 秒)解决方案

python 复制代码
import requests
import time
from agno.tools import tool

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_cloudflare_challenge(website_url: str, proxy: str) -> dict:
    """
    解决 Cloudflare 5 秒挑战页面。

    参数:
        website_url: 受保护页面的 URL
        proxy: 代理格式: http://user:pass@ip:port

    返回:
        包含访问受保护页面所需 cookies 和 user_agent 的字典
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "AntiCloudflareTask",
            "websiteURL": website_url,
            "proxy": proxy
        }
    }

    # 创建任务
    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return {"error": result.get('errorDescription')}

    task_id = result.get("taskId")

    # 轮询结果
    for attempt in range(60):
        time.sleep(3)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return {
                "cookies": result["solution"]["cookies"],
                "user_agent": result["solution"]["userAgent"]
            }
        if result.get("status") == "failed":
            return {"error": result.get('errorDescription')}

    return {"error": "等待解决方案超时"}

完整的 Agno 智能体示例

以下是一个使用 CapSolver 处理验证码挑战的 Agno 智能体的完整示例:

python 复制代码
import os
import requests
import time
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import tool

# 配置
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"


@tool
def solve_recaptcha_v2(website_url: str, website_key: str) -> str:
    """
    使用 CapSolver 解决 reCAPTCHA v2 挑战。

    参数:
        website_url: 包含 reCAPTCHA v2 的网站 URL
        website_key: reCAPTCHA 的站点密钥 (data-sitekey 属性)

    返回:
        g-recaptcha-response 令牌或错误信息
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "ReCaptchaV2TaskProxyLess",
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    for _ in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return result["solution"]["gRecaptchaResponse"]
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "超时"


@tool
def solve_turnstile(website_url: str, website_key: str) -> str:
    """
    解决 Cloudflare Turnstile 挑战。

    参数:
        website_url: 包含 Turnstile 的网站 URL
        website_key: Turnstile 小部件的站点密钥

    返回:
        Turnstile 令牌或错误信息
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": "AntiTurnstileTaskProxyLess",
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    for _ in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            return result["solution"]["token"]
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "超时"

"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()

复制代码
    if result.get("status") == "ready":
        return result["solution"]["token"]
    if result.get("status") == "failed":
        return f"失败: {result.get('errorDescription')}"

return "超时"

@tool
def check_capsolver_balance() -> str:
"""
检查当前 CapSolver 账户余额。

复制代码
返回:
    当前余额信息
"""
response = requests.post(
    "https://api.capsolver.com/getBalance",
    json={"clientKey": CAPSOLVER_API_KEY}
)
result = response.json()

if result.get("errorId") != 0:
    return f"错误: {result.get('errorDescription')}"

return f"余额: ${result.get('balance', 0):.4f}"

创建网络爬虫代理

web_scraper_agent = Agent(
name="网络爬虫代理",
model=OpenAIChat(id="gpt-4o"),
tools=[solve_recaptcha_v2, solve_turnstile, check_capsolver_balance],
description="能够自动处理验证码挑战的专家网络爬虫",
instructions=[
"你是一个具有验证码解决能力的网络爬虫专家。",
"遇到验证码时,识别类型并使用相应的解决工具。",
"对于 reCAPTCHA v2,使用 solve_recaptcha_v2 并提供 URL 和站点密钥。",
"对于 Turnstile,使用 solve_turnstile 并提供 URL 和站点密钥。",
"在开始大规模爬虫任务前,始终检查 CapSolver 余额。"
],
markdown=True
)

def main():
print("=" * 60)
print("Agno + CapSolver 集成演示")
print("=" * 60)

复制代码
# 任务:解决 reCAPTCHA 挑战
task = """
我需要你解决一个 reCAPTCHA v2 挑战。

网站 URL: https://www.google.com/recaptcha/api2/demo
站点密钥: 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-

请解决此验证码并报告令牌的前 50 个字符。
并在开始前检查我的 CapSolver 余额。
"""

response = web_scraper_agent.run(task)
print("\n代理响应:")
print(response.content)

if name == "main":
main()

复制代码
---

## 使用 Agno 团队与 CapSolver

Agno 支持多代理团队。以下是创建具有专门验证码解决能力的团队的方法:

```python
from agno.agent import Agent
from agno.team import Team
from agno.models.openai import OpenAIChat
from agno.tools import tool
import requests
import time

CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"


@tool
def solve_any_captcha(
    website_url: str,
    website_key: str,
    captcha_type: str = "ReCaptchaV2TaskProxyLess"
) -> str:
    """支持多种类型的通用验证码解决方案。"""
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": captcha_type,
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    response = requests.post("https://api.capsolver.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        return f"错误: {result.get('errorDescription')}"

    task_id = result.get("taskId")

    for _ in range(60):
        time.sleep(2)
        result = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
        ).json()

        if result.get("status") == "ready":
            solution = result.get("solution", {})
            return solution.get("gRecaptchaResponse") or solution.get("token")
        if result.get("status") == "failed":
            return f"失败: {result.get('errorDescription')}"

    return "超时"


# 验证码专家代理
captcha_agent = Agent(
    name="验证码专家",
    model=OpenAIChat(id="gpt-4o"),
    tools=[solve_any_captcha],
    description="擅长识别和解决各种验证码类型的专家",
    instructions=[
        "从页面分析中识别验证码类型",
        "使用正确的参数使用相应的解决工具",
        "清晰地报告成功或失败"
    ]
)

# 数据提取代理
data_agent = Agent(
    name="数据提取器",
    model=OpenAIChat(id="gpt-4o"),
    description="从网页中提取和处理数据",
    instructions=[
        "从 HTML 内容中提取结构化数据",
        "需要时请求验证码解决",
        "验证和清理提取的数据"
    ]
)

# 创建团队
scraping_team = Team(
    name="网络爬虫团队",
    agents=[captcha_agent, data_agent],
    description="专门从事网络爬虫并处理验证码的团队"
)

如何提交验证码令牌

每种验证码类型都需要不同的提交方法:

reCAPTCHA v2/v3 - 令牌注入

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

def submit_recaptcha_token(driver, token: str):
    """注入 reCAPTCHA 令牌并提交"""
    recaptcha_response = driver.find_element(By.ID, "g-recaptcha-response")
    driver.execute_script("arguments[0].style.display = 'block';", recaptcha_response)
    recaptcha_response.clear()
    recaptcha_response.send_keys(token)

    form = driver.find_element(By.TAG_NAME, "form")
    form.submit()

Turnstile - 令牌注入

python 复制代码
def submit_turnstile_token(driver, token: str):
    """注入 Turnstile 令牌并提交"""
    turnstile_input = driver.find_element(By.NAME, "cf-turnstile-response")
    driver.execute_script("arguments[0].value = arguments[1];", turnstile_input, token)

    form = driver.find_element(By.TAG_NAME, "form")
    form.submit()
python 复制代码
import requests

def access_cloudflare_protected_page(url: str, cf_solution: dict):
    """使用 Cloudflare 挑战解决方案访问受保护页面。"""
    session = requests.Session()

    for cookie in cf_solution["cookies"]:
        session.cookies.set(cookie["name"], cookie["value"])

    headers = {"User-Agent": cf_solution["user_agent"]}

    response = session.get(url, headers=headers)
    return response.text

最佳实践

1. 带重试的错误处理

python 复制代码
from agno.tools import tool
import time

@tool
def solve_with_retry(
    website_url: str,
    website_key: str,
    max_retries: int = 3
) -> str:
    """在失败时自动重试的验证码解决方案。"""
    for attempt in range(max_retries):
        try:
            result = solve_recaptcha_v2(website_url, website_key)
            if not result.startswith("错误") and not result.startswith("失败"):
                return result
        except Exception as e:
            if attempt == max_retries - 1:
                return f"所有重试均失败: {str(e)}"
        time.sleep(2 ** attempt)  # 指数退避

    return "最大重试次数已超过"

2. 余额管理

python 复制代码
@tool
def check_balance() -> float:
    """检查 CapSolver 账户余额。"""
    response = requests.post(
        "https://api.capsolver.com/getBalance",
        json={"clientKey": CAPSOLVER_API_KEY}
    )
    return response.json().get("balance", 0)

3. 异步支持

Agno 支持异步操作以提高性能:

python 复制代码
import asyncio
import aiohttp
from agno.tools import tool

@tool
async def solve_captcha_async(website_url: str, website_key: str) -> str:
    """用于更好并发的异步验证码解决方案。"""
    async with aiohttp.ClientSession() as session:
        payload = {
            "clientKey": CAPSOLVER_API_KEY,
            "task": {
                "type": "ReCaptchaV2TaskProxyLess",
                "websiteURL": website_url,
                "websiteKey": website_key
            }
        }

        async with session.post(
            "https://api.capsolver.com/createTask",
            json=payload
        ) as response:
            result = await response.json()

        if result.get("errorId") != 0:
            return f"错误: {result.get('errorDescription')}"

        task_id = result.get("taskId")

        for _ in range(60):
            await asyncio.sleep(2)

            async with session.post(
                "https://api.capsolver.com/getTaskResult",
                json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
            ) as response:
                result = await response.json()

            if result.get("status") == "ready":
                solution = result.get("solution", {})
                return solution.get("gRecaptchaResponse") or solution.get("token")
            if result.get("status") == "failed":
                return f"失败: {result.get('errorDescription')}"

        return "超时"

结论

将 CapSolver 与 Agno 集成可以释放自主 AI 代理在基于网络的任务中的全部潜力。通过将 Agno 的闪电般的速度、隐私优先的多代理编排与 CapSolver 的行业领先的验证码解决方案能力相结合,开发者可以构建能够处理最复杂的网络保护机制的稳健自动化解决方案。

无论你是构建数据提取管道、自动化测试框架还是智能网络代理,Agno + CapSolver 的组合都能提供生产环境中所需的性能、可靠性和可扩展性。


准备好开始了吗? 注册 CapSolver 并使用优惠码 AGNO 在首次充值时获得额外 6% 的奖励!


常见问题

什么是 Agno?

Agno 是一个多功能代理框架、运行时和控制平面,用于构建 AI 产品。它比 LangGraph 快 529 倍,内存使用量低 24 倍,并且完全在你的基础设施中运行,以确保最大隐私。

CapSolver 如何与 Agno 集成?

CapSolver 通过使用 @tool 装饰器的自定义工具与 Agno 集成。你创建包装 CapSolver API 的函数,使你的 AI 代理在进行网络操作时能够自动解决验证码挑战。

CapSolver 可以解决哪些类型的验证码?

CapSolver 支持多种验证码类型,包括 reCAPTCHA v2、reCAPTCHA v3、Cloudflare Turnstile、Cloudflare 挑战、AWS WAF、GeeTest 等。

CapSolver 的费用是多少?

CapSolver 提供基于验证码类型和数量的具有竞争力的定价。访问 capsolver.com 了解当前定价详情。使用优惠码 AGNO 在首次充值时获得 5% 的奖励。

我可以将 Agno 与不同的 LLM 提供商一起使用吗?

可以!Agno 与模型无关,支持 50 多种模型提供商,包括 OpenAI、Anthropic Claude、Google Gemini、Groq 等。

Agno 可以免费使用吗?

可以,Agno 是开源的,并采用 MIT 许可证发布。该框架可以免费使用,但你可能会产生 LLM API 调用和 CapSolver 等验证码解决方案服务的费用。

如何找到验证码站点密钥?

站点密钥通常在页面的 HTML 源代码中找到。查找:

  • reCAPTCHA: data-sitekey 属性或 grecaptcha.render() 调用
  • Turnstile: Turnstile 小部件中的 data-sitekey 属性

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

更多

使用 Python 爬取网站时解决 403 禁止访问错误
解决使用 Python 爬取网站时的 403 禁止访问错误

学习如何在使用Python爬取网站时克服403禁止错误。本指南涵盖IP轮换、用户代理伪装、请求节流、身份验证处理以及使用无头浏览器绕过访问限制,从而成功继续网络爬取。

web scraping
Logo of CapSolver

Ethan Collins

13-Jan-2026

Agno 与 CapSolver 集成
如何在 Agno 中通过 CapSolver 集成解决验证码

学习如何将CapSolver与Agno集成以解决reCAPTCHA v2/v3、Cloudflare Turnstile和WAF挑战的自主人工智能代理。包含用于网页抓取和自动化的实际Python示例。

web scraping
Logo of CapSolver

Ethan Collins

13-Jan-2026

2026年最佳Python网络爬虫库
2026年顶级Python网络爬虫库

探索2026年最佳的Python网络爬虫库,比较其功能、易用性和性能,以满足您的数据提取需求。包含专家见解和常见问题解答。

web scraping
Logo of CapSolver

Lucas Mitchell

09-Jan-2026

如何使用Katana和CapSolver解决验证码
将Katana与CapSolver集成:用于网络爬虫的自动CAPTCHA解决

学习如何将Katana与Capsolver集成,以在无头爬虫中自动解决reCAPTCHA v2和Cloudflare Turnstile。

web scraping
Logo of CapSolver

Emma Foster

09-Jan-2026

如何使用Crawlab和CapSolver解决验证码
将Crawlab与CapSolver集成:用于分布式爬虫的自动验证码解决

学习如何将 CapSolver 与 Crawlab 集成,以规模化解决 reCAPTCHA 和 Cloudflare Turnstile。

web scraping
Logo of CapSolver

Emma Foster

09-Jan-2026

2026年你必须了解的最好的AI抓取工具
2026年你必须知道的最佳AI抓取工具

发现2026年最好的AI抓取工具选项。我们对比了顶级的AI网络抓取工具,包括Bright Data、Crawl4AI和Browse AI,并提供了具体的常见用途,帮助您掌握自动化数据提取和安全挑战解决。

web scraping
Logo of CapSolver

Nikolai Smirnov

07-Jan-2026