CAPSOLVER
博客
如何在EasySpider中使用CapSolver集成解决验证码

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

Logo of CapSolver

Emma Foster

Machine Learning Engineer

04-Feb-2026

EasySpider CapSolver验证码集成

EasySpider 是一个功能强大的可视化网络爬虫工具,允许任何人通过无需编写代码的设计和执行浏览器自动化任务。其直观的流程图界面使其对非程序员易于使用,同时为开发人员提供高级功能。

CapSolver 通过提供无缝的验证码解决功能,完善了 EasySpider 的自动化体验。虽然 EasySpider 支持多种验证码识别方案,但集成 CapSolver 的人工智能解决方案可以确保可靠、快速地绕过 reCAPTCHA、Cloudflare Turnstile 和其他验证码挑战。


什么是 EasySpider?

EasySpider 是一个免费、开源的可视化网络爬虫和浏览器自动化工具。与需要编程知识的传统爬虫库不同,EasySpider 让您通过点击网页元素来设计任务。

核心理念

EasySpider 基于三个基本原则运行:

  1. 可视化优先设计:通过直观的流程图界面创建复杂的自动化工作流
  2. 无代码访问:无论是否有编程经验,都可以像使用 Excel 一样设计任务
  3. 完全可扩展性:在需要时执行自定义 JavaScript、Python 代码和 Selenium 语句

EasySpider 的主要功能

  • 可视化任务设计器:通过点击操作创建自动化工作流
  • 跨平台:支持 Windows、macOS 和 Linux
  • 无头模式:在没有可见浏览器窗口的情况下运行任务
  • 自定义代码执行:在工作流中执行 JavaScript 和 Python 代码
  • Selenium 集成:使用 Selenium 语句直接操作浏览器
  • API 调用:调用外部系统和服务
  • 命令行执行:通过 CLI 以编程方式运行任务
  • 定时任务:自动化重复的数据收集

工作流功能

功能 描述
无限循环嵌套 处理复杂的分页和多级数据提取
条件分支 根据页面内容创建决策点
中断语句 在流程图中的任何位置退出循环
正则表达式 使用模式匹配提取数据
OCR 识别 从图像和截图中提取文本
代理支持 旋转 IP 地址和隧道连接

什么是 CapSolver?

CapSolver 是一个领先的验证码解决服务,提供人工智能驱动的解决方案来绕过各种验证码挑战。支持多种验证码类型和闪电般的响应时间,CapSolver 可无缝集成到自动化工作流中。

支持的验证码类型

为什么将 CapSolver 与 EasySpider 集成?

虽然 EasySpider 提供了内置的验证码支持,但集成 CapSolver 有显著优势:

  1. 更高的成功率:CapSolver 的人工智能解决方案实现一致的高成功率
  2. 更快的解决速度:优化的基础设施快速交付令牌
  3. 更广的覆盖范围:支持所有主要验证码类型
  4. 可靠性:企业级服务,具有出色的正常运行时间
  5. 可扩展性:处理高容量自动化而不会出现瓶颈

安装

安装 EasySpider

  1. GitHub 发布页面 下载最新版本
  2. 选择适合您平台的版本:
    • EasySpider_windows_x64.zip 用于 64 位 Windows
    • EasySpider_windows_x86.zip 用于 32 位 Windows
    • EasySpider_MacOS.dmg 用于 macOS
    • EasySpider_Linux_x64.tar.gz 用于 Linux
  3. 解压存档并运行 EasySpider.exe(Windows)或相应的可执行文件

注意:确保端口 8084 可用于进程间通信。

自定义集成的 Python 依赖项

如果您计划使用 CapSolver 辅助脚本:

bash 复制代码
pip install requests

为 EasySpider 创建 CapSolver 工具

以下是一个专为 Python 工作流设计的可重用 CapSolver 工具类:

基本 CapSolver 服务

python 复制代码
import requests
import time
from typing import Optional
from dataclasses import dataclass

CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'

@dataclass
class TaskResult:
    status: str
    solution: Optional[dict] = None
    error_description: Optional[str] = None


class CapSolverService:
    def __init__(self, api_key: str = CAPSOLVER_API_KEY):
        self.api_key = api_key
        self.base_url = 'https://api.capsolver.com'

    def create_task(self, task_data: dict) -> str:
        response = requests.post(
            f'{self.base_url}/createTask',
            json={
                'clientKey': self.api_key,
                'task': task_data
            }
        )
        data = response.json()

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

        return data['taskId']

    def get_task_result(self, task_id: str, max_attempts: int = 60) -> TaskResult:
        for _ in range(max_attempts):
            time.sleep(2)

            response = requests.post(
                f'{self.base_url}/getTaskResult',
                json={
                    'clientKey': self.api_key,
                    'taskId': task_id
                }
            )
            data = response.json()

            if data.get('status') == 'ready':
                return TaskResult(
                    status='ready',
                    solution=data.get('solution')
                )

            if data.get('status') == 'failed':
                raise Exception(f"任务失败: {data.get('errorDescription')}")

        raise Exception('等待验证码解决方案超时')

    def solve_recaptcha_v2(self, website_url: str, website_key: str) -> str:
        task_id = self.create_task({
            'type': 'ReCaptchaV2TaskProxyLess',
            'websiteURL': website_url,
            'websiteKey': website_key
        })

        result = self.get_task_result(task_id)
        return result.solution.get('gRecaptchaResponse', '') if result.solution else ''

    def solve_turnstile(
        self,
        website_url: str,
        website_key: str,
        action: Optional[str] = None,
        cdata: Optional[str] = None
    ) -> str:
        task_data = {
            'type': 'AntiTurnstileTaskProxyLess',
            'websiteURL': website_url,
            'websiteKey': website_key
        }

        if action or cdata:
            metadata = {}
            if action:
                metadata['action'] = action
            if cdata:
                metadata['cdata'] = cdata
            task_data['metadata'] = metadata

        task_id = self.create_task(task_data)
        result = self.get_task_result(task_id)
        return result.solution.get('token', '') if result.solution else ''


# 全局实例
capsolver = CapSolverService()

集成方法

EasySpider 提供了多种集成 CapSolver 的方式。选择最适合您用例的方法。

方法 1:使用 JavaScript 注入的自定义操作

EasySpider 支持在工作流中执行自定义 JavaScript。这是最直接的集成方法。

步骤 1:在 EasySpider 中创建一个新任务并导航到受验证码保护的页面

步骤 2:添加一个“自定义操作”节点,使用以下 JavaScript:

javascript 复制代码
// 从 reCAPTCHA 元素中提取 sitekey
var siteKey = document.querySelector('.g-recaptcha').getAttribute('data-sitekey');
var pageUrl = window.location.href;

// 存储以供下一步使用
window.captchaSiteKey = siteKey;
window.captchaPageUrl = pageUrl;

// 用于调试的日志
console.log('Site Key:', siteKey);
console.log('Page URL:', pageUrl);

步骤 3:使用 EasySpider 的外部系统调用功能调用一个 Python 脚本以解决验证码并返回令牌

步骤 4:添加另一个“自定义操作”节点以注入令牌:

javascript 复制代码
// 令牌将从外部脚本传递
var token = arguments[0];  // 从 EasySpider 传递

// 显示响应文本区域并设置令牌
document.getElementById('g-recaptcha-response').style.display = 'block';
document.getElementById('g-recaptcha-response').value = token;

// 如果有回调函数,执行它
if (typeof ___grecaptcha_cfg !== 'undefined') {
    var clients = ___grecaptcha_cfg.clients;
    if (clients) {
        Object.keys(clients).forEach(function(key) {
            var client = clients[key];
            if (client.callback) {
                client.callback(token);
            }
        });
    }
}

方法 1B:使用 EasySpider 的无代理 Turnstile

这是一个使用 EasySpider 可视化节点的无代理 Turnstile 工作流。它不需要代理

步骤 1:创建一个新任务并导航到受 Turnstile 保护的页面。

步骤 2:添加三个 自定义操作 节点(代码模式 = JavaScript)以捕获 Turnstile 元数据:

javascript 复制代码
// 节点标题: TS_SiteKey
return document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey') || '';
javascript 复制代码
// 节点标题: TS_Action(可选)
return document.querySelector('.cf-turnstile')?.getAttribute('data-action') || '';
javascript 复制代码
// 节点标题: TS_Cdata(可选)
return document.querySelector('.cf-turnstile')?.getAttribute('data-cdata') || '';

步骤 3:添加一个 执行系统命令 节点以使用 CapSolver 解决 Turnstile:

bash 复制代码
python captcha_solver.py "{{current_url}}" "Field[\"TS_SiteKey\"]" "turnstile" "Field[\"TS_Action\"]" "Field[\"TS_Cdata\"]"

将此节点命名为 Token,以便以后引用其输出为 Field["Token"]

步骤 4:添加一个 自定义操作 节点(JavaScript)以注入令牌:

javascript 复制代码
var token = `Field["Token"]`;
var inputs = document.querySelectorAll('input[name="cf-turnstile-response"], input[name="turnstile-response"]');
inputs.forEach(function(el) {
    el.value = token;
    el.dispatchEvent(new Event('input', { bubbles: true }));
    el.dispatchEvent(new Event('change', { bubbles: true }));
});

步骤 5:点击表单提交按钮(或使用 JS 提交)。

注意:无代理的 Turnstile 在许多网站上有效,但某些部署会将令牌与求解器 IP 进行验证。如果发生这种情况,则需要使用代理求解。

方法 3:修改 EasySpider 的 ExecuteStage

对于高级用户,可以直接扩展 EasySpider 的 Python 执行引擎。easyspider_executestage.py 脚本处理任务执行,并可以修改以包含 CapSolver 集成。

位置{EasySpider_Directory}/Code/easyspider_executestage.py

将 CapSolver 服务添加到执行上下文中:

python 复制代码
# 添加到 easyspider_executestage.py 的顶部
import requests
import time

# 添加 CapSolver 类
class CapSolverService:
    # ... (实现如上)
    pass

# 创建全局实例
capsolver = CapSolverService('YOUR_CAPSOLVER_API_KEY')

# 现在可以在 eval/exec 块中使用 capsolver.solve_recaptcha_v2()

然后在您的 EasySpider 任务中,使用“执行 Python 代码”功能:

python 复制代码
# 在 EasySpider 的 Python 执行块中
site_key = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')
token = capsolver.solve_recaptcha_v2(current_url, site_key)
driver.execute_script(f'''
    document.getElementById('g-recaptcha-response').value = `{token}`;
''')

最佳实践

1. 带重试的错误处理

python 复制代码
import time
from functools import wraps
from typing import Callable, TypeVar, Any

T = TypeVar('T')

def retry(max_retries: int = 3, exponential_backoff: bool = True):
    """带指数退避的重试逻辑装饰器。"""
    def decorator(func: Callable[..., T]) -> Callable[..., T]:
        @wraps(func)
        def wrapper(*args: Any, **kwargs: Any) -> T:
            last_exception = None

            for attempt in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    last_exception = e

                    if attempt < max_retries - 1:
                        delay = (2 ** attempt) if exponential_backoff else 1
                        print(f'尝试 {attempt + 1} 失败,将在 {delay} 秒后重试...')
                        time.sleep(delay)

            raise last_exception

        return wrapper
    return decorator


@retry(max_retries=3, exponential_backoff=True)
def solve_with_retry(capsolver, url: str, site_key: str) -> str:
    return capsolver.solve_recaptcha_v2(url, site_key)

2. 余额管理

python 复制代码
def check_balance(api_key: str) -> float:
    response = requests.post(
        'https://api.capsolver.com/getBalance',
        json={'clientKey': api_key}
    )
    data = response.json()
    return data.get('balance', 0)


def main():
    balance = check_balance(CAPSOLVER_API_KEY)

    if balance < 1:
        print('警告:CapSolver 余额不足!请充值。')
    else:
        print(f'当前余额:${balance:.2f}')

3. EasySpider 命令行执行

从命令行运行 EasySpider 任务:

bash 复制代码
# 基本执行
python easyspider_executestage.py --id [task_id] --read_type local --headless 1

# 带完整参数
python easyspider_executestage.py \
    --ids [0] \
    --server_address http://localhost:8074 \
    --config_folder "./" \
    --headless 1 \
    --read_type local

完整工作流:包含 CapSolver 集成的 EasySpider 任务

以下是创建包含 CapSolver 集成的完整 EasySpider 工作流的步骤:

步骤 1:在 EasySpider 中设计您的任务

  1. 启动 EasySpider 并点击“设计任务”
  2. 输入目标 URL(例如,https://www.google.com/recaptcha/api2/demo
  3. 添加工作流节点:
    • 打开页面:导航到 URL
    • 自定义操作:执行 JavaScript 以检测验证码
    • 系统调用:调用带有 CapSolver 的 Python 脚本
    • 自定义操作:注入令牌
    • 点击元素:提交表单
    • 收集数据:提取结果

步骤 2:创建 CapSolver 辅助脚本

将此保存为captcha_solver.py文件到你的EasySpider目录中:

python 复制代码
#!/usr/bin/env python3
"""
CapSolver辅助脚本用于EasySpider
用法:python captcha_solver.py <url> <site_key> <captcha_type> [action] [cdata]
"""

import sys
import requests
import time

CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'

def solve_captcha(url, site_key, captcha_type='recaptcha_v2', action=None, cdata=None):
    """解决CAPTCHA并返回令牌。"""

    if captcha_type == 'recaptcha_v2':
        task_type = 'ReCaptchaV2TaskProxyLess'
    elif captcha_type == 'turnstile':
        task_type = 'AntiTurnstileTaskProxyLess'
    else:
        raise ValueError(f'未知的CAPTCHA类型: {captcha_type}')

    # 创建任务
    task = {
        'type': task_type,
        'websiteURL': url,
        'websiteKey': site_key
    }
    if captcha_type == 'turnstile' and (action or cdata):
        metadata = {}
        if action:
            metadata['action'] = action
        if cdata:
            metadata['cdata'] = cdata
        task['metadata'] = metadata

    response = requests.post(
        'https://api.capsolver.com/createTask',
        json={
            'clientKey': CAPSOLVER_API_KEY,
            'task': task
        }
    )
    data = response.json()

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

    task_id = data['taskId']

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

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

        if data.get('status') == 'ready':
            solution = data.get('solution', {})
            return solution.get('gRecaptchaResponse') or solution.get('token')

        if data.get('status') == 'failed':
            raise Exception(f"失败: {data.get('errorDescription')}")

    raise Exception('超时')


if __name__ == '__main__':
    if len(sys.argv) < 3:
        print('用法: python captcha_solver.py <url> <site_key> [captcha_type] [action] [cdata]')
        sys.exit(1)

    url = sys.argv[1]
    site_key = sys.argv[2]
    captcha_type = sys.argv[3] if len(sys.argv) > 3 else 'recaptcha_v2'
    action = sys.argv[4] if len(sys.argv) > 4 else None
    cdata = sys.argv[5] if len(sys.argv) > 5 else None

    try:
        token = solve_captcha(url, site_key, captcha_type, action, cdata)
        print(token)  # 输出令牌供EasySpider捕获
    except Exception as e:
        print(f'ERROR: {e}', file=sys.stderr)
        sys.exit(1)

步骤3:配置EasySpider以使用脚本

在你的EasySpider工作流中,添加一个“执行系统命令”节点:

bash 复制代码
python captcha_solver.py "{{current_url}}" "{{site_key}}" "recaptcha_v2"

对于Turnstile(无代理):

bash 复制代码
python captcha_solver.py "{{current_url}}" "{{site_key}}" "turnstile" "{{action}}" "{{cdata}}"

输出(令牌)可以被捕获并在后续的JavaScript注入步骤中使用。


结论

将CapSolver与EasySpider集成创建了一个强大的可视化网页自动化组合。EasySpider直观的流程图界面使任务设计对所有人都易于使用,而CapSolver则处理原本会阻止自动化的验证码挑战。

这种集成的关键优势包括:

  • 可视化 + 强大功能:通过图形化界面设计任务,同时处理复杂的验证码
  • 多种集成方式:通过JavaScript注入、Python脚本或直接修改实现
  • 支持所有验证码类型:reCAPTCHA v2,v3 Cloudflare Turnstile,挑战等
  • 生产就绪:包含错误处理、重试和余额管理
  • 跨平台:适用于Windows、macOS和Linux

无论你是构建数据提取管道、监控系统还是自动化测试框架,EasySpider + CapSolver组合提供了现代网页自动化的可视化设计体验和验证码解决能力。


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


常见问题

什么是EasySpider?

EasySpider是一款免费、开源的可视化网页抓取和浏览器自动化工具。它允许用户通过图形化流程图界面设计自动化任务,而无需编写代码,同时支持自定义JavaScript、Python代码和Selenium语句以满足高级用例。

CapSolver如何与EasySpider集成?

CapSolver通过多种方法与EasySpider集成:在EasySpider工作流中的自定义JavaScript注入、通过系统命令调用的外部Python脚本,或直接修改EasySpider的Python执行引擎。所有方法都使用CapSolver的API来解决验证码并将令牌注入页面。

EasySpider能自行解决验证码吗?

EasySpider内置了一些验证码识别方案和OCR功能。然而,与CapSolver集成可以提供更高的成功率、更快的解决速度以及更广泛的验证码类型覆盖,适用于生产自动化工作流。

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

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

CapSolver的费用是多少?

CapSolver根据解决的验证码类型和数量提供具有竞争力的定价。访问capsolver.com查看当前定价详情。使用代码EASYSPIDER可获得首次充值的5%奖励。

EasySpider可以免费使用吗?

是的,EasySpider完全免费,采用AGPL-3.0许可证开源。该软件允许免费商业使用和修改。网络服务部署必须向用户提供源代码访问权限。

如何找到验证码的site key?

site key通常在页面的HTML源代码中找到:

  • reCAPTCHA.g-recaptcha元素的data-sitekey属性
  • Turnstile.cf-turnstile元素的data-sitekey属性

能否从命令行运行EasySpider任务?

是的,EasySpider支持通过easyspider_executestage.py进行命令行执行。这使得与其他系统的集成、计划任务执行和无头自动化成为可能。

EasySpider支持哪些平台?

EasySpider支持Windows(x64/x86)、macOS和Linux。从GitHub发布页面下载相应版本。

能否在EasySpider中使用代理?

是的,EasySpider支持代理IP配置和隧道切换。您可以在任务设置中配置代理,或通过EasySpider的浏览器启动选项进行配置。

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

更多

在 Node.js 中进行网页爬虫:使用 Node Unblocker 和 CapSolver
在 Node.js 中进行网页爬虫:使用 Node Unblocker 和 CapSolver

掌握Node.js中的网络爬虫技术,利用Node Unblocker绕过限制,并使用CapSolver解决CAPTCHAs。本指南提供高效且可靠的数据提取进阶策略。

web scraping
Logo of CapSolver

Lucas Mitchell

04-Feb-2026

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

EasySpider 是一个可视化、无代码的网页抓取和浏览器自动化工具,当与 CapSolver 结合使用时,它可以可靠地解决 reCAPTCHA v2 和 Cloudflare Turnstile 等验证码,从而实现在网站间无缝的自动化数据提取。

web scraping
Logo of CapSolver

Emma Foster

04-Feb-2026

Relevance 人工智能与 CapSolver
如何在 Relevance AI 中通过 CapSolver 集成解决 reCAPTCHA v2

使用CapSolver构建一个Relevance AI工具来解决reCAPTCHA v2。通过API自动完成表单提交,无需浏览器自动化。

web scraping
Logo of CapSolver

Ethan Collins

03-Feb-2026

即时数据抓取工具:无需代码快速提取网页数据的方法
即时数据抓取工具:无需代码快速提取网页数据的方法

探索2026年最佳的即时数据抓取工具。学习无需编码即可使用顶级扩展和API快速提取网页数据的方法,实现自动化数据提取。

web scraping
Logo of CapSolver

Sora Fujimoto

28-Jan-2026

网页抓取新闻文章
使用Python进行新闻文章的网络爬虫(2026年指南)

在2026年掌握使用Python进行新闻文章网络爬取的技能。学习使用CapSolver解决reCAPTCHA v2/v3,构建可扩展的数据管道。

web scraping
Logo of CapSolver

Adélia Cruz

28-Jan-2026

2026年十大无代码抓取工具推荐
2026年十大无代码爬虫工具

2026年最佳无代码网络爬虫工具精选列表。比较AI驱动的爬虫、可视化点击平台、定价、优缺点及实际应用案例。

web scraping
Logo of CapSolver

Emma Foster

27-Jan-2026