CAPSOLVER
博客
如何集成Camoufox与CapSolver实现无缝CAPTCHA解决

如何集成Camoufox与CapSolver实现无缝CAPTCHA解决

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

16-Dec-2025

TL;DR:使用 Camoufox 来规避浏览器指纹识别,使用 CapSolver 来自动解决 CAPTCHA,例如 Cloudflare Turnstile 和 reCAPTCHA v2/v3。它们结合使用可以实现稳定、类人的网页自动化,可扩展性强,检测率低,成功率高。

引言

网页自动化已成为数据收集、测试和各种业务操作的关键。然而,现代网站部署了复杂的反机器人措施和 CAPTCHA,这可能会阻止即使是最精心设计的自动化脚本。

CamoufoxCapSolver 的组合为解决这一挑战提供了强大的解决方案:

  • Camoufox:一个基于 Firefox 的开源反检测浏览器,通过高级指纹欺骗来规避机器人检测
  • CapSolver:一个 AI 驱动的 CAPTCHA 解决服务,可以处理 Cloudflare Turnstile、reCAPTCHA 等

这些工具结合使用,可以实现无缝的网页自动化,绕过指纹检测和 CAPTCHA 挑战。

集成目标

本指南将帮助您实现三个核心目标:

  1. 绕过机器人检测 - 使用 Camoufox 的指纹注入功能,使其看起来像一个合法的浏览器
  2. 自动解决 CAPTCHA - 集成 CapSolver 的 API,无需人工干预即可处理 CAPTCHA 挑战
  3. 保持类人行为 - 结合人性化的鼠标移动和智能 CAPTCHA 解决

什么是 Camoufox?

Camoufox 是一个隐蔽且极简的 Firefox 定制版本,专为网页抓取和自动化设计。与其他依赖 JavaScript 注入(可能被检测到)的反检测解决方案不同,Camoufox 在浏览器本身的 C++ 级别 实现指纹欺骗。

关键功能

  • 指纹注入 - 在原生级别欺骗导航器属性、屏幕尺寸、WebGL、WebRTC、字体等
  • 类人鼠标移动 - 内置的光标人性化算法,用于真实交互
  • BrowserForge 集成 - 生成模仿真实设备分布的指纹
  • GeoIP 支持 - 根据代理 IP 自动计算时区、地区和地理位置
  • Firefox 插件支持 - 可加载自定义扩展,包括广告拦截器

安装

bash 复制代码
# 安装 Python 包
pip install -U camoufox[geoip]

# 下载 Camoufox 浏览器
camoufox fetch

基础用法

python 复制代码
from camoufox.sync_api import Camoufox

with Camoufox(humanize=True) as browser:
    page = browser.new_page()
    page.goto("https://example.com")

什么是 CapSolver?

CapSolver 是一个 AI 驱动的自动 CAPTCHA 解决服务,支持多种 CAPTCHA 类型。它提供了一个简单的 API,允许您提交 CAPTCHA 挑战并在几秒内收到解决方案。

支持的 CAPTCHA 类型

  • Cloudflare Turnstile - 最常见的现代反机器人挑战
  • reCAPTCHA v2 - 图像版和隐形版
  • reCAPTCHA v3 - 基于评分的验证
  • AWS WAF - 亚马逊网络服务的 CAPTCHA
  • 以及更多...

快速入门 CapSolver

  1. capsolver.com 注册
  2. 向账户充值
  3. 从仪表板获取 API 密钥

额外奖励:注册时使用代码 CAMOUFOX 可获得额外积分!


集成前的挑战

在将 Camoufox 与 CapSolver 集成之前,网页自动化面临以下痛点:

挑战 影响
浏览器指纹检测 脚本在到达内容前被阻止
CAPTCHA 挑战 需要手动解决,破坏自动化
IP 声誉系统 代理IP迅速被标记并封禁
行为分析 检测到非人类模式

Camoufox + CapSolver 集成可在单一流程中解决所有这些挑战。


集成方法

方法 1:API 集成(推荐)

API 集成方法为您提供完整的 CAPTCHA 解决流程控制,并支持任何 CAPTCHA 类型。

设置要求

bash 复制代码
pip install camoufox[geoip] httpx

核心集成模式

python 复制代码
import asyncio
import httpx
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def create_task(task_payload: dict) -> str:
    """创建 CAPTCHA 解决任务并返回任务 ID。"""
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": task_payload
            }
        )
        result = response.json()
        if result.get("errorId") != 0:
            raise Exception(f"CapSolver 错误: {result.get('errorDescription')}")
        return result["taskId"]


async def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
    """轮询任务结果直到解决或超时。"""
    async with httpx.AsyncClient() as client:
        for _ in range(max_attempts):
            response = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            result = response.json()

            if result.get("status") == "ready":
                return result["solution"]
            elif result.get("status") == "failed":
                raise Exception(f"任务失败: {result.get('errorDescription')}")

            await asyncio.sleep(1)

    raise TimeoutError("CAPTCHA 解决超时")


async def solve_captcha(task_payload: dict) -> dict:
    """完成 CAPTCHA 解决流程。"""
    task_id = await create_task(task_payload)
    return await get_task_result(task_id)

方法 2:浏览器扩展

您也可以使用 CapSolver 浏览器扩展与 Camoufox 配合使用,以实现更自动化的操作。

安装步骤

  1. capsolver.com/en/extension 下载 CapSolver 扩展
  2. 解压扩展文件
  3. 将其加载到 Camoufox 中:
python 复制代码
from camoufox.sync_api import Camoufox

with Camoufox(
    addons=["/path/to/capsolver-extension"],
    headless=False  # 扩展需要非无头模式
) as browser:
    page = browser.new_page()
    # 扩展会自动检测并解决 CAPTCHA

代码示例

示例 1:解决 Cloudflare Turnstile

Cloudflare Turnstile 是最常见的 CAPTCHA 挑战之一。以下是解决方法:

python 复制代码
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_turnstile(site_key: str, page_url: str) -> str:
    """解决 Cloudflare Turnstile 并返回令牌。"""
    import httpx

    async with httpx.AsyncClient() as client:
        # 创建任务
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "AntiTurnstileTaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        task_id = response.json()["taskId"]

        # 轮询结果
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["token"]

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/protected-page"
    turnstile_site_key = "0x4XXXXXXXXXXXXXXXXX"  # 在页面源代码中查找

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os="windows"
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # 等待 Turnstile 加载
        await page.wait_for_selector('input[name="cf-turnstile-response"]', timeout=10000)

        # 解决 CAPTCHA
        token = await solve_turnstile(turnstile_site_key, target_url)
        print(f"获取到 Turnstile 令牌: {token[:50]}...")

        # 注入令牌
        await page.evaluate(f'''
            document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";

            // 如果存在隐藏回调,则设置
            const callback = document.querySelector('[data-callback]');
            if (callback) {{
                const callbackName = callback.getAttribute('data-callback');
                if (window[callbackName]) {{
                    window[callbackName]('{token}');
                }}
            }}
        ''')

        # 提交表单
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("成功绕过 Turnstile!")


if __name__ == "__main__":
    asyncio.run(main())

示例 2:解决 reCAPTCHA v2

python 复制代码
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
    """解决 reCAPTCHA v2 并返回令牌。"""
    import httpx

    async with httpx.AsyncClient() as client:
        # 创建任务
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV2TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        result = response.json()

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

        task_id = result["taskId"]

        # 轮询结果
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

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

            await asyncio.sleep(2)


async def main():
    target_url = "https://example.com/login"
    recaptcha_site_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"  # 在页面源代码中查找

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os=["windows", "macos"]  # 随机选择操作系统
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # 用类人延迟填写表单字段
        await page.fill('input[name="username"]', "user@example.com")
        await asyncio.sleep(0.5)  # 类人暂停
        await page.fill('input[name="password"]', "password123")

        # 解决 CAPTCHA
        print("正在解决 reCAPTCHA v2...")
        token = await solve_recaptcha_v2(recaptcha_site_key, target_url)
        print(f"获取到令牌: {token[:50]}...")

        # 将令牌注入到 reCAPTCHA 响应字段中
        await page.evaluate(f'''
            document.getElementById('g-recaptcha-response').innerHTML = '{token}';
            document.getElementById('g-recaptcha-response').style.display = 'block';
        ''')

        # 提交表单
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("登录成功!")


if __name__ == "__main__":
    asyncio.run(main())

示例 3:解决 reCAPTCHA v3

reCAPTCHA v3 是基于评分的,不需要用户交互。您需要指定 action 参数。

python 复制代码
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v3(
    site_key: str,
    page_url: str,
    action: str = "verify",
    min_score: float = 0.7
) -> str:
    """使用指定的 action 和最低评分解决 reCAPTCHA v3。"""
    import httpx

    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV3TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                    "pageAction": action,
                    "minScore": min_score
                }
            }
        )
        result = response.json()

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

        task_id = result["taskId"]

        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

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

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/search"
    recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"

    async with AsyncCamoufox(
        humanize=2.0,  # 最大 2 秒类人移动
        headless=True,  # 可以无头运行
        geoip=True,  # 从代理 IP 自动检测地理位置
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # 使用 "search" 动作解决 reCAPTCHA v3
        print("正在解决 reCAPTCHA v3...")
        token = await solve_recaptcha_v3(
            recaptcha_v3_key,
            target_url,
            action="search",
            min_score=0.9  # 请求高评分
        )

        # 通过站点回调提交令牌
        await page.evaluate(f'''
            // 通过站点的回调提交令牌

grecaptcha.execute('{recaptcha_v3_key}', {{action: 'search'}})
.then(function(originalToken) {{
// 用我们解决的令牌替换
submitSearch('{token}');
}});
''')

复制代码
    print("已绕过 reCAPTCHA v3!")

if name == "main":
asyncio.run(main())

复制代码
---

## 最佳实践

### 1. 使用 GeoIP 的代理轮换

使用 Camoufox 的 GeoIP 功能自动将指纹与您的代理位置匹配:

```python
async with AsyncCamoufox(
    geoip=True,  # 从代理 IP 自动检测
    proxy={
        "server": "http://proxy.example.com:8080",
        "username": "user",
        "password": "pass"
    }
) as browser:
    # 指纹将匹配代理的地理位置
    pass

2. 指纹一致性

在会话内保持指纹一致,但会话间进行轮换:

python 复制代码
from browserforge.fingerprints import Screen

# 限制为常见的屏幕尺寸
screen = Screen(
    min_width=1280,
    max_width=1920,
    min_height=720,
    max_height=1080
)

async with AsyncCamoufox(
    os="windows",
    screen=screen,
) as browser:
    pass

3. 速率限制

通过添加延迟避免触发速率限制:

python 复制代码
import random

async def human_delay():
    """模拟人类行为的随机延迟。"""
    await asyncio.sleep(random.uniform(1.0, 3.0))

# 在操作之间使用
await page.click('button')
await human_delay()
await page.fill('input', 'text')

4. 错误处理

始终为 CAPTCHA 解决实现适当的错误处理:

python 复制代码
async def solve_with_retry(task_payload: dict, max_retries: int = 3) -> dict:
    """带重试逻辑的 CAPTCHA 解决函数。"""
    for attempt in range(max_retries):
        try:
            return await solve_captcha(task_payload)
        except TimeoutError:
            if attempt < max_retries - 1:
                print(f"超时,正在重试... (第{attempt + 1}次/{max_retries}次)")
                await asyncio.sleep(5)
            else:
                raise
        except Exception as e:
            if "balance" in str(e).lower():
                raise  # 不要重试余额错误
            if attempt < max_retries - 1:
                await asyncio.sleep(2)
            else:
                raise

优惠:立即开始!

准备好用 Camoufox 和 CapSolver 加速您的网络自动化了吗?

CapSolver 注册时使用代码 CAMOUFOX 以获得额外积分!

此专属优惠可让您立即开始进行 CAPTCHA 解决。

结论

CamoufoxCapSolver 的集成创建了一个强大的网络自动化工具包:

  • Camoufox 通过原生级别的指纹欺骗来处理机器人检测
  • CapSolver 通过人工智能驱动的 CAPTCHA 解决
  • 两者结合 可实现看起来完全像人类的无缝自动化

无论您是构建网络爬虫、自动化测试系统还是数据收集管道,这种组合都能提供您所需的可靠性和隐蔽性。


常见问题

问:哪些 CAPTCHA 类型与此集成效果最好?

答:CapSolver 支持所有主要的 CAPTCHA 类型。Cloudflare Turnstile 和 reCAPTCHA v2/v3 的成功率最高。此集成可与 CapSolver 支持的任何 CAPTCHA 无缝配合。

问:可以使用无头模式吗?

答:可以!Camoufox 支持无头模式并保持其指纹欺骗功能。对于 reCAPTCHA v3 和基于令牌的 CAPTCHA,无头模式可以完美运行。对于 v2 可见 CAPTCHA,有头模式可能提供更好的结果。

问:如何找到 CAPTCHA 的站点密钥?

答:在页面源代码中查找:

  • Turnstile: data-sitekey 属性或 cf-turnstile 元素
  • reCAPTCHA: g-recaptcha div 上的 data-sitekey 属性

问:如果 CAPTCHA 解决失败怎么办?

答:常见解决方案:

  1. 验证您的 API 密钥和余额
  2. 确保站点密钥正确
  3. 检查页面 URL 是否与 CAPTCHA 出现的位置匹配
  4. 对于 v3,尝试调整 action 参数和最低分数
  5. 实现带延迟的重试逻辑

问:Camoufox 是否与 Selenium 兼容?

答:Camoufox 是基于 Playwright 构建的,而不是 Selenium。但是,您可以使用相同的 CapSolver API 集成模式与任何浏览器自动化框架配合使用。

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

更多

Camoufox 和 CapSolver 验证码解决流程
如何集成Camoufox与CapSolver实现无缝CAPTCHA解决

了解如何将Camoufox与CapSolver集成,以可靠地大规模绕过Cloudflare Turnstile和reCAPTCHA。

web scraping
Logo of CapSolver

Ethan Collins

16-Dec-2025

如何在Python中使用Botasaurus和CapSolver解决验证码(完整指南)
如何使用Botasaurus和CapSolver在Python中解决CAPTCHA(完整指南)

学习如何将Botasaurus(Python网络爬虫框架)与CapSolver API集成,以自动解决reCAPTCHA v2/v3和Turnstile。

web scraping
Logo of CapSolver

Ethan Collins

15-Dec-2025

网页抓取错误
网络爬虫中的402、403、404和429错误是什么?全面指南

通过了解402、403、404和429错误来掌握网络爬虫的错误处理。学习如何修复403禁止错误,实施解决429错误的速率限制方案,并处理新兴的402支付所需状态码。

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

用Python进行网络爬虫
使用Python的网络爬虫:2026年最佳策略

学习2026年的顶级Python网络爬虫技巧,包括处理动态JavaScript内容、管理认证流程、解决验证码、识别隐藏陷阱、模拟人类行为、优化请求模式以及在大规模爬虫项目中减少资源使用。

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

解决网络爬虫验证码
避免网络爬虫被封禁及验证码破解方法

网络爬虫已成为从网站中提取数据的流行技术。然而,许多网站采用反爬虫措施,包括...

web scraping
Logo of CapSolver

Rajinder Singh

11-Dec-2025

网络爬虫和网络抓取
网页爬虫与网页抓取:本质区别

揭示网络爬虫与网页抓取的本质区别。了解它们各自的用途、10个强大的应用场景,以及CapSolver如何帮助绕过AWS WAF和CAPTCHA限制,实现无缝的数据采集。

web scraping
Logo of CapSolver

Ethan Collins

09-Dec-2025