CAPSOLVER
博客
如何使用CapSolver API解决浏览器中的验证码

如何使用CapSolver API解决浏览器中的验证码

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

04-Sep-2025

Browser-use是一个强大的开源Python库,使AI代理能够控制Web浏览器来自动执行数据抓取、表单填写和重复性在线活动等任务。通过利用Playwright进行浏览器自动化并与大型语言模型(LLM)如OpenAI的GPT模型集成,Browser-use允许用户发出自然语言命令,即使对于那些没有广泛编码技能的用户也能使用。但是,Web自动化中的一个常见挑战是遇到验证码,验证码旨在阻止自动化脚本,并可能破坏Browser-use的工作流程。

CapSolver是一项AI驱动的服务,专门用于解决各种类型的验证码,包括reCAPTCHA和Cloudflare Turnstile。通过将CapSolver与Browser-use集成,您可以确保您的自动化任务顺利进行,而无需手动干预来解决验证码。

本文提供了一个分步指南,介绍如何将CapSolver与Browser-use集成以有效处理验证码。我们将介绍必要的设置,提供完整的代码示例,并分享最佳实践来帮助您入门。

Browser-use概述和用例

Browser-use是一个Python库,通过允许AI代理使用自然语言指令与网站交互来简化Web自动化。它在后台使用Playwright来控制Chromium、Firefox和WebKit等浏览器,并与LLM集成以解释和执行用户命令。这使得Browser-use非常适合自动化复杂的任务,而无需编写大量的代码。

用例

Browser-use支持各种自动化任务,包括:

  • 数据抓取: 从网站提取数据以进行市场研究、价格监控或内容聚合。
  • 表单填写: 自动执行使用来自各种来源(例如求职申请或帐户注册)的数据填写在线表单的过程。
  • 任务自动化: 执行重复性任务,例如登录帐户、浏览网站或单击按钮。

这些任务通常涉及与部署验证码以防止自动化访问的网站交互,因此可靠的验证码解决方案对于不间断的自动化至关重要。

为什么需要验证码解决

网站经常部署诸如验证码之类的反机器人防御措施,以阻止自动化访问、垃圾邮件和恶意活动。这些验证码旨在通过单击复选框或解决图像难题等挑战来区分人和机器人,这对于Web抓取构成了重大障碍。当使用Browser-use自动化任务时,遇到验证码会使流程中断,阻止工具在没有手动干预的情况下抓取所需数据。

常见的验证码类型包括:

验证码类型 说明
reCAPTCHA v2 需要用户选中一个复选框或根据提示选择图像。
reCAPTCHA v3 使用评分系统评估用户行为,通常对用户不可见。
Cloudflare Turnstile 一种注重隐私的验证码替代方案,可最大限度地减少用户交互。

对于Web抓取,这是一个关键问题:验证码的具体目的是为了阻止Browser-use依赖的从网站提取数据的自动化。如果没有办法绕过这些障碍,抓取工作就会停滞不前,使自动化无效。幸运的是,将CapSolver的API与Browser-use集成提供了一个强大的解决方案。CapSolver自动解决这些验证码,使Browser-use能够通过反机器人防御并成功抓取数据,而不会中断。无论是处理reCAPTCHA v2还是Cloudflare Turnstile,CapSolver都能确保Browser-use能够应对各种验证码挑战,使其成为从受保护网站无缝高效提取数据的必备工具。

这种集成对于希望从使用验证码的网站抓取数据的任何人来说都是一个改变游戏规则的因素,因为它消除了对手动输入的需求,并使Web抓取过程顺利运行。

如何使用CapSolver处理验证码

CapSolver提供了一个API,可以使用高级AI算法解决各种验证码。要将CapSolver与Browser-use集成,您可以使用@controller.action装饰器定义一个自定义操作。此操作将检测网页上的验证码,提取必要信息(例如,reCAPTCHA的站点密钥),调用CapSolver的API以获取解决方案,并将解决方案注入页面。

将CapSolver与Browser-use集成的步骤

  1. 注册CapSolver: 在CapSolver上创建一个帐户,添加资金并获取您的API密钥。
  2. 设置Browser-use: 安装Browser-use及其依赖项,并使用LLM提供商(例如OpenAI)的API密钥配置您的环境。
  3. 安装依赖项: 使用Python并安装所需的软件包:browser-useplaywrightrequests
  4. 定义自定义操作: 在您的Browser-use脚本中创建一个自定义操作,以使用CapSolver的API处理验证码。
  5. 运行代理: 指示AI代理在任务执行期间遇到验证码时调用自定义操作。

关键代码片段

以下是使用CapSolver的API解决reCAPTCHA v2的自定义操作示例:

python 复制代码
import requests
import time
from browser_use import Controller, ActionResult
from playwright.async_api import Page

CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'

@controller.action('Solve CAPTCHA', domains=['*'])
async def solve_captcha(page: Page) -> ActionResult:
    if await page.query_selector('.g-recaptcha'):
        site_key = await page.evaluate("document.querySelector('.g-recaptcha').getAttribute('data-sitekey')")
        page_url = page.url

        # Create task with CapSolver
        response = requests.post('https://api.capsolver.com/createTask', json={
            'clientKey': CAPSOLVER_API_KEY,
            'task': {
                'type': 'ReCaptchaV2TaskProxyLess',
                'websiteURL': page_url,
                'websiteKey': site_key,
            }
        })
        task_id = response.json().get('taskId')
        if not task_id:
            return ActionResult(success=False, message='Failed to create CapSolver task')

        # Poll for solution
        while True:
            time.sleep(5)
            result_response = requests.post('https://api.capsolver.com/getTaskResult', json={
                'clientKey': CAPSOLVER_API_KEY,
                'taskId': task_id
            })
            result = result_response.json()
            if result.get('status') == 'ready':
                solution = result.get('solution', {}).get('gRecaptchaResponse')
                if solution:
                    await page.evaluate(f"document.getElementById('g-recaptcha-response').innerHTML = '{solution}';")
                    return ActionResult(success=True, message='CAPTCHA solved')
                else:
                    return ActionResult(success=False, message='No solution found')
            elif result.get('status') == 'failed':
                return ActionResult(success=False, message='CapSolver failed to solve CAPTCHA')
    return ActionResult(success=False, message='No CAPTCHA found')

此代码片段定义了一个自定义操作,该操作检查reCAPTCHA v2元素,提取站点密钥,使用CapSolver创建任务,轮询解决方案并将令牌注入页面。

完整的代码示例+分步说明

以下是演示如何将CapSolver与Browser-use集成以解决验证码的完整代码示例。

先决条件

确保已安装必要的软件包:

bash 复制代码
pip install browser-use playwright requests
playwright install

使用所需的API密钥设置您的环境。创建一个包含您的OpenAI和CapSolver API密钥的.env文件:

env 复制代码
OPENAI_API_KEY=your_openai_api_key
CAPSOLVER_API_KEY=your_capsolver_api_key

完整的代码示例

创建一个包含以下内容的Python脚本:

python 复制代码
import os
import asyncio
import requests
from dotenv import load_dotenv
from browser_use import Agent, Controller, ActionResult
from browser_use.browser import BrowserSession
from browser_use.llm import ChatOpenAI
from playwright.async_api import Page

# Load environment variables from .env file
load_dotenv()

CAPSOLVER_API_KEY = os.getenv('CAPSOLVER_API_KEY')

controller = Controller()

@controller.action('Solve CAPTCHA', domains=['*'])
async def solve_captcha(page) -> ActionResult:
    if await page.query_selector('.g-recaptcha'):
        site_key = await page.evaluate("document.querySelector('.g-recaptcha').getAttribute('data-sitekey')")
        page_url = page.url

        response = requests.post('https://api.capsolver.com/createTask', json={
            'clientKey': CAPSOLVER_API_KEY,
            'task': {
                'type': 'ReCaptchaV2TaskProxyLess',
                'websiteURL': page_url,
                'websiteKey': site_key,
            }
        })

        task_id = response.json().get('taskId')
        print(task_id)
        if not task_id:
            return ActionResult(success=False, message='Failed to create CapSolver task')

        while True:
            await asyncio.sleep(5)
            result_response = requests.post('https://api.capsolver.com/getTaskResult', json={
                'clientKey': CAPSOLVER_API_KEY,
                'taskId': task_id
            })
            result = result_response.json()
            print(f"CAPTCHA result status: {result.get('status')}")
            if result.get('status') == 'ready':
                solution = result.get('solution', {}).get('gRecaptchaResponse')
                print(f"CAPTCHA solution: {solution}")
                if solution:
                    print("Submitting CAPTCHA solution...")
                    # Try both possible input fields for the CAPTCHA token
                    await page.evaluate(f"""
                        // Try the standard g-recaptcha-response field
                        var gRecaptchaResponse = document.getElementById('g-recaptcha-response');
                        if (gRecaptchaResponse) {{
                            gRecaptchaResponse.innerHTML = '{solution}';
                            var event = new Event('input', {{ bubbles: true }});
                            gRecaptchaResponse.dispatchEvent(event);
                        }}
                        
                        // Also try the recaptcha-token field
                        var recaptchaToken = document.getElementById('recaptcha-token');
                        if (recaptchaToken) {{
                            recaptchaToken.value = '{solution}';
                            var event = new Event('input', {{ bubbles: true }});
                            recaptchaToken.dispatchEvent(event);
                        }}
                    """)
                    
                    # Wait a moment for the token to be processed
                    await asyncio.sleep(2)
                    print("Token injected successfully! CAPTCHA solved.")
                    
                    # Method 2: Click submit button directly using the correct selector
                    print("Now clicking submit button...")
                    try:
                        # Use the specific button selector you provided
                        submit_button = await page.query_selector("body > main > form > fieldset > button")
                        if submit_button:
                            await submit_button.click()
                            print("✅ Submit button clicked successfully!")
                        else:
                            print("❌ Submit button not found!")
                            return ActionResult(success=False, message='Submit button not found')
                    except Exception as e:
                        print(f"❌ Error clicking submit button: {e}")
                        return ActionResult(success=False, message=f'Error clicking submit: {e}')
                    
                    print("CAPTCHA solved and form submitted successfully!")
                    return ActionResult(success=True, message='CAPTCHA solved and form submitted')
                   
                else:
                    return ActionResult(success=False, message='No solution found')
            elif result.get('status') == 'failed':
                return ActionResult(success=False, message='CapSolver failed to solve CAPTCHA')
    return ActionResult(success=False, message='No CAPTCHA found')

llm = ChatOpenAI(model="gpt-4o-mini")

async def main():
    try:
        print("🚀 Starting browser-use CAPTCHA solver agent...")
        
        # Simple task instruction for CAPTCHA solving and form submission
        task = """Navigate to https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php and solve the CAPTCHA, then submit the form.

STEP 1: Navigate to the reCAPTCHA demo page: https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php

STEP 2: Wait for the page to fully load. You should see a form with input fields and a reCAPTCHA checkbox.

STEP 3: Look for a reCAPTCHA element (usually a checkbox that says "I'm not a robot" or similar).

STEP 4: Use the "solve_captcha" action to automatically solve the CAPTCHA and submit the form.

STEP 5: Report the final result.

Note: The solve_captcha action will handle both solving the CAPTCHA and submitting the form automatically."""
        
        # Create browser session first
        browser_session = BrowserSession()
        
        # Create agent with the browser session
        agent = Agent(
            task=task, 
            llm=llm, 
            controller=controller,
            browser_session=browser_session
        )
        
        print("📱 Running CAPTCHA solver agent...")
        result = await agent.run()
        print(f"✅ Agent completed: {result}")
        
        # Keep browser open to see results
        input('Press Enter to close the browser...')
        await browser_session.close()
        
    except Exception as e:
        print(f"❌ Error: {e}")

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

分步说明

步骤 说明

| 1. 安装依赖项 | 使用 pip install browser-use playwright requests 安装 browser-useplaywrightrequests。运行 playwright install 安装必要的浏览器。 |
| 2. 配置环境 | 创建一个 .env 文件,其中包含您的 OpenAI 和 CapSolver API 密钥,以安全地存储凭据。 |
| 3. 定义自定义操作 | 使用 @controller.action 装饰器定义 solve_captcha,它检查 reCAPTCHA v2 元素,提取站点密钥,调用 CapSolver 的 API,并将解决方案注入页面。 |
| 4. 初始化控制器和代理 | 创建一个 Controller 实例,定义自定义操作,初始化 LLM(例如,使用 GPT-4o-mini 的 ChatOpenAI),并使用控制器创建 BrowserUse 代理。 |
| 5. 运行代理 | 提供一个任务,其中包含在遇到 CAPTCHA 时使用自定义操作解决 CAPTCHA 的说明。代理导航到指定的 URL,检测 CAPTCHA,调用自定义操作并提交表单。 |
| 6. 错误处理 | 自定义操作包括处理 CapSolver 任务失败或找不到解决方案的情况,返回相应的 ActionResult 对象。 |
| 7. 清理 | 代理自动管理浏览器资源,在任务完成后关闭浏览器。 |

此示例侧重于 reCAPTCHA v2,但您可以通过修改任务类型(例如,针对 Turnstile 使用 AntiTurnstileTaskProxyLess)将其适用于其他 CAPTCHA 类型。

演示步骤

本节介绍如何使用样本任务来集成,该任务导航到带有 reCAPTCHA v2 勾选框的演示页面并提交表单。

  1. 任务设置: 任务指示 AI 代理访问 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php,提交表单,并使用 solve_captcha 操作解决任何 CAPTCHA。
  2. 代理执行: Browser-use 代理启动一个 Playwright 控制的浏览器并导航到指定的 URL。
  3. CAPTCHA 检测: 代理通过查找 .g-recaptcha 元素来检查 CAPTCHA。如果找到,则会触发 solve_captcha 操作。
  4. 自定义操作执行: solve_captcha 操作提取站点密钥和页面 URL,使用 CapSolver 的 API 创建任务,并轮询解决方案。
  5. 解决方案注入: 接收到解决方案后,操作会将令牌注入 g-recaptcha-response 字段。
  6. 表单提交: 代理通过单击提交按钮提交表单,完成任务。
  7. 任务完成: 代理返回结果,指示表单已成功提交。

直观地,您会看到浏览器导航到演示页面,解决方案注入后 reCAPTCHA 勾选框会自动被选中,并且表单会成功提交。

常见问题解答

问题 答案
CapSolver 可以解决哪些类型的 CAPTCHA? CapSolver 支持 reCAPTCHA v2/v3、Cloudflare Turnstile 等。有关完整列表,请参阅 CapSolver 文档
如何处理不同的 CAPTCHA 类型? 修改自定义操作以检测 CAPTCHA 类型(例如,检查特定元素或属性),并使用相应的 CapSolver 任务类型,例如针对 Turnstile 使用 AntiTurnstileTaskProxyLess
如果 CapSolver 无法解决 CAPTCHA 会怎样? 在自定义操作中实现重试逻辑或通知用户失败。记录错误以进行调试,并考虑回退策略。
我可以将 CapSolver 与其他自动化工具一起使用吗? 可以,CapSolver 的 API 与任何支持 HTTP 请求的工具兼容,包括 Selenium、Puppeteer 和 Playwright。
我是否需要使用 CapSolver 代理? 对于特定区域或 IP 绑定的 CAPTCHA,可能需要代理。CapSolver 支持使用代理;请参阅其文档了解详情。

结论

将 CapSolver 与 Browser-use 集成可提供强大的解决方案,用于处理 Web 自动化任务中的 CAPTCHA。通过定义一个自定义操作来解决 CAPTCHA,您可以确保您的 AI 代理可以无缝地导航网站,即使遇到反机器人措施。这种组合利用了 Browser-use 的易用性和 CapSolver 强大的 CAPTCHA 解决能力,从而创建高效的自动化工作流程。

要开始使用,请注册 CapSolver 并探索 Browser-use。按照设置说明操作并实现提供的代码示例。有关更多详细信息,请访问 CapSolver 文档Browser-use 文档。在您的下一个自动化项目中尝试此集成,并体验自动解决 CAPTCHA 的便利!

Browser-use 用户额外福利:充值 CapSolver 帐户时使用促销代码 BROWSERUSE,即可获得独家 6% 额外信用 — 无限额,无过期时间。
image

支持的浏览器和工具

  • Browser-use: 使用 Playwright,支持 Chromium、Firefox 和 WebKit 浏览器。
  • CapSolver: 与任何支持 HTTP 的客户端兼容,包括 Chrome 和 Firefox 的浏览器扩展程序。

了解更多信息并探索其他类型的框架

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

更多