如何将 Helium 与 CapSolver 集成,实现无缝 CAPTCHA 自动化解决

1. 简介:告别繁琐的 Web 自动化

对于开发者而言,Web 自动化是日常工作中不可或缺的一部分。然而,现代网站部署了复杂的反爬虫机制和 CAPTCHA 验证码,这常常会中断我们的自动化脚本。

HeliumCapSolver 结合起来,为这一挑战提供了一个优雅的解决方案:

  • Helium : 一个轻量级的 Python 库,它在 Selenium 之上提供了一个简单、人类可读的 API,极大地简化了浏览器操作。
  • CapSolver: 一个由 AI 驱动的 CAPTCHA 解决服务,能够处理 Cloudflare Turnstile、reCAPTCHA 等主流验证码。

通过它们的集成,我们可以实现无缝的 Web 自动化,让脚本能够自动处理验证码挑战。

1.1. 集成目标

本指南将帮助您实现以下核心目标:

  1. 简化浏览器自动化:利用 Helium 直观的 API 编写出简洁、易读的代码。
  2. 自动解决 CAPTCHA:集成 CapSolver 的 API,无需人工干预即可处理验证码挑战。
  3. 保持灵活性:在享受 Helium 带来的简洁性的同时,仍能随时访问 Selenium 的全部功能。

2. 为什么选择 Helium?

Helium 是一个基于 Python 的库,旨在让 Selenium 的使用变得更加简单。它提供了一个高级 API,让您可以像编写自然语言指令一样编写浏览器自动化代码。

2.1. 核心特性

  • 简洁的语法 :您可以直接写 click("提交"),而不是复杂的 XPath 选择器。
  • 自动等待:自动等待元素出现,避免了繁琐的显式等待代码。
  • 高可读性 :代码就像指令一样清晰:write("你好", into="搜索框")
  • 完全兼容 Selenium :您可以随时通过 get_driver() 访问底层的 Selenium 驱动。
  • 轻量级:在 Selenium 之上开销极小。

2.2. 安装

bash 复制代码
# 安装 Helium
pip install helium

# 安装 requests 库用于 CapSolver API 调用
pip install requests

2.3. 基础用法示例

python 复制代码
from helium import *

# 启动浏览器并导航
start_chrome("https://wikipedia.org")

# 在搜索框中输入
write("Python 编程", into=S("input[name='search']"))

# 点击搜索按钮
click(Button("搜索"))

# 检查文本是否存在
if Text("Python").exists():
    print("找到 Python 文章了!")

# 关闭浏览器
kill_browser()

3. CapSolver:AI 驱动的验证码解决方案

CapSolver 是一种 AI 驱动的自动 CAPTCHA 解决服务,支持广泛的验证码类型。它提供了一个简单的 API,让您可以在几秒钟内提交验证码挑战并接收解决方案。

3.1. 支持的 CAPTCHA 类型

  • Cloudflare Turnstile:最常见的现代反机器人挑战。
  • reCAPTCHA v2:包括图像和隐形变体。
  • reCAPTCHA v3:基于分数的验证。
  • AWS WAF:亚马逊云服务 CAPTCHA。
  • DataDome:企业级机器人保护。
  • 以及更多...

3.2. CapSolver 入门

  1. CapSolver 仪表板 注册账户。
  2. 为您的账户充值。
  3. 从仪表板获取您的 API 密钥。

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

3.3. API 端点

  • 服务器 Ahttps://api.capsolver.com
  • 服务器 Bhttps://api-stable.capsolver.com

4. 集成方法:API 与浏览器扩展

4.1. API 集成(推荐)

API 集成方法为您提供了对 CAPTCHA 解决过程的完全控制,并且适用于 CapSolver 支持的任何验证码类型。

4.1.1. 核心集成模式

以下是用于创建任务和轮询结果的核心 Python 函数:

python 复制代码
import time
import requests
from helium import *

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


def create_task(task_payload: dict) -> str:
    """创建 CAPTCHA 解决任务并返回任务 ID。"""
    response = requests.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"]


def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
    """轮询任务结果,直到解决或超时。"""
    for _ in range(max_attempts):
        response = requests.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')}")

        time.sleep(1)

    raise TimeoutError("CAPTCHA 解决超时")


def solve_captcha(task_payload: dict) -> dict:
    """完整的 CAPTCHA 解决工作流。"""
    task_id = create_task(task_payload)
    return get_task_result(task_id)

4.2. 浏览器扩展集成

您也可以使用 CapSolver 浏览器扩展与 Helium 配合,实现自动 CAPTCHA 检测和解决。

4.2.1. 安装步骤
  1. capsolver.com/en/extension 下载 CapSolver 扩展。
  2. 解压扩展文件。
  3. 配置您的 API 密钥 :在扩展的 config.js 文件中进行配置。
  4. 通过 Helium 将其加载到 Chrome 中:
python 复制代码
from helium import *
from selenium.webdriver import ChromeOptions

options = ChromeOptions()
# 确保路径正确指向解压后的扩展文件夹
options.add_argument('--load-extension=/path/to/capsolver-extension')

start_chrome(options=options)
# 扩展将自动检测并解决 CAPTCHA

注意:扩展必须配置有效的 API 密钥才能自动解决 CAPTCHA。

5. 实战代码示例

5.1. 解决 reCAPTCHA v2

此示例演示了如何使用 CapSolver 解决 Google 演示页面上的 reCAPTCHA v2,并自动检测 sitekey

python 复制代码
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions

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


def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
    """解决 reCAPTCHA v2 并返回 token。"""
    # 创建任务
    response = requests.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"]
    print(f"任务已创建: {task_id}")

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

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

        print("  等待解决方案...")
        time.sleep(1)


def main():
    target_url = "https://www.google.com/recaptcha/api2/demo"

    # 配置浏览器以进行反检测
    options = ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument('--disable-blink-features=AutomationControlled')

    print("启动浏览器...")
    start_chrome(target_url, options=options)
    driver = get_driver()

    try:
        time.sleep(2)

        # 从页面自动检测 site key
        recaptcha_element = driver.find_element("css selector", ".g-recaptcha")
        site_key = recaptcha_element.get_attribute("data-sitekey")
        print(f"检测到 site key: {site_key}")

        # 使用 CapSolver 解决 CAPTCHA
        print("\n正在使用 CapSolver 解决 reCAPTCHA v2...")
        token = solve_recaptcha_v2(site_key, target_url)
        print(f"获取到 token: {token[:50]}...")

        # 注入 token
        print("\n注入 token...")
        driver.execute_script(f'''
            var responseField = document.getElementById('g-recaptcha-response');
            responseField.style.display = 'block';
            responseField.value = '{token}';
        ''')
        print("Token 注入成功!")

        # 使用 Helium 的简洁语法提交表单
        print("\n提交表单...")
        click("提交") # 假设按钮文本是"提交"或"Submit"

        time.sleep(3)

        # 检查是否成功
        if "Verification Success" in driver.page_source:
            print("\n=== 成功! ===")
            print("reCAPTCHA 已解决,表单已提交!")

    finally:
        kill_browser()


if __name__ == "__main__":
    main()

5.2. 解决 Cloudflare Turnstile

Cloudflare Turnstile 是另一个常见的挑战。以下是解决它的方法:

python 复制代码
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions

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


def solve_turnstile(site_key: str, page_url: str) -> str:
    """解决 Cloudflare Turnstile 并返回 token。"""
    response = requests.post(
        f"{CAPSOLVER_API}/createTask",
        json={
            "clientKey": CAPSOLVER_API_KEY,
            "task": {
                "type": "AntiTurnstileTaskProxyLess",
                "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 = requests.post(
            f"{CAPSOLVER_API}/getTaskResult",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "taskId": task_id
            }
        ).json()

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

        time.sleep(1)


def main():
    target_url = "https://your-target-site.com"
    turnstile_site_key = "0x4XXXXXXXXXXXXXXXXX"  # 在页面源码中查找

    # 配置浏览器
    options = ChromeOptions()
    options.add_argument('--disable-blink-features=AutomationControlled')

    start_chrome(target_url, options=options)
    driver = get_driver()

    try:
        # 等待 Turnstile 加载
        time.sleep(3)

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

        # 注入 token
        driver.execute_script(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}');
                }}
            }}
        ''')

        # 使用 Helium 提交表单
        if Button("提交").exists():
            click("提交")

        print("Turnstile 绕过成功!")

    finally:
        kill_browser()


if __name__ == "__main__":
    main()

5.3. 解决 reCAPTCHA v3

reCAPTCHA v3 是基于分数的,不需要用户交互:

python 复制代码
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions

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


def solve_recaptcha_v3(
    site_key: str,
    page_url: str,
    action: str = "verify",
    min_score: float = 0.7
) -> str:
    """解决 reCAPTCHA v3,指定 action 和最低分数。"""
    response = requests.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 = requests.post(
            f"{CAPSOLVER_API}/getTaskResult",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "taskId": task_id
            }
        ).json()

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

        time.sleep(1)


def main():
    target_url = "https://your-target-site.com"
    recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"

    # 设置无头浏览器模式
    options = ChromeOptions()
    options.add_argument('--headless')

    start_chrome(target_url, options=options)
    driver = get_driver()

    try:
        # 解决 reCAPTCHA v3,使用 "login" action
        print("正在解决 reCAPTCHA v3...")
        token = solve_recaptcha_v3(
            recaptcha_v3_key,
            target_url,
            action="login",
            min_score=0.9
        )

        # 注入 token
        driver.execute_script(f'''
            var responseField = document.querySelector('[name="g-recaptcha-response"]');
            if (responseField) {{
                responseField.value = '{token}';
            }}
            // 如果存在回调函数,则调用
            if (typeof onRecaptchaSuccess === 'function') {{
                onRecaptchaSuccess('{token}');
            }}
        ''')

        print("reCAPTCHA v3 绕过成功!")

    finally:
        kill_browser()


if __name__ == "__main__":
    main()

6. 最佳实践与技巧

6.1. 浏览器配置:更像人类用户

为了避免被网站识别为自动化脚本,请配置 Chrome 选项,使其更像一个常规浏览器:

python 复制代码
from helium import *
from selenium.webdriver import ChromeOptions

options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--window-size=1920,1080') # 设置窗口大小

start_chrome(options=options)

6.2. 结合 Helium 与 Selenium 的优势

在大多数情况下使用 Helium 的简洁语法,但在需要底层控制时,随时切换到 Selenium:

python 复制代码
from helium import *

start_chrome("https://target-site.com")

# 使用 Helium 进行简单交互
write("用户名", into="邮箱")
write("密码", into="密码")

# 访问 Selenium 驱动进行复杂操作
driver = get_driver()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 滚动到底部

# 切换回 Helium
click("登录")

6.3. 速率限制与随机延迟

通过添加随机延迟来模拟人类行为,避免触发速率限制:

python 复制代码
import random
import time

def human_delay(min_sec=1.0, max_sec=3.0):
    """随机延迟以模仿人类行为。"""
    time.sleep(random.uniform(min_sec, max_sec))

# 在操作之间使用
click("下一步")
human_delay()
write("数据", into="输入框")

6.4. 错误处理与重试机制

为 CAPTCHA 解决实现健壮的错误处理和重试逻辑:

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

7. Helium vs Selenium:快速对比

操作 Selenium Helium
点击按钮 driver.find_element(By.XPATH, "//button[text()='提交']").click() click("提交")
输入文本 driver.find_element(By.NAME, "email").send_keys("test@test.com") write("test@test.com", into="邮箱")
按下回车 element.send_keys(Keys.ENTER) press(ENTER)
检查文本是否存在 "欢迎" in driver.page_source Text("欢迎").exists()

8. 总结

HeliumCapSolver 的集成,为 Web 自动化创建了一个强大而优雅的工具集:

  • Helium 提供了简洁、高可读性的浏览器自动化 API。
  • CapSolver 通过 AI 解决了 CAPTCHA 这一核心障碍。
  • 它们的结合 使得开发者能够以最少的代码实现无缝的自动化。

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

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

9. 常见问题解答 (FAQ)

9.1. 为什么选择 Helium 而不是纯粹的 Selenium?

Helium 让 Selenium 更易于使用:

  • 语法更简单,更具人类可读性。
  • 自动等待元素加载。
  • 代码更简洁。
  • 需要时仍可完全访问 Selenium。
  • 加快开发时间。

9.2. 哪些 CAPTCHA 类型最适合这种集成?

CapSolver 支持所有主要的 CAPTCHA 类型。Cloudflare Turnstile 和 reCAPTCHA v2/v3 具有最高的成功率。该集成与 CapSolver 支持的任何验证码都能无缝协作。

9.3. 我可以在无头模式下使用吗?

可以!Helium 通过 ChromeOptions 支持无头模式。对于 reCAPTCHA v3 和基于 Token 的 CAPTCHA,无头模式运行完美。对于 v2 可视 CAPTCHA,有头模式可能会提供更好的结果。

9.4. 如何找到 CAPTCHA 的 Site Key?

在页面源码中查找:

  • Turnstiledata-sitekey 属性或 cf-turnstile 元素。
  • reCAPTCHAg-recaptcha div 上的 data-sitekey 属性。

9.5. 如果 CAPTCHA 解决失败怎么办?

常见解决方案:

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

9.6. 我仍然可以使用 Selenium 的功能吗?

是的!调用 get_driver() 即可访问底层的 Selenium WebDriver,以执行 Helium 未直接涵盖的任何操作。


注:本文中的代码示例仅为演示目的,请替换为您的实际 API 密钥和目标 URL。

CapsolverCN官 方代理交流扣 群:497493756

相关推荐
Python大数据分析@2 小时前
使用Dify搭建工作流,实现自动化商品采集分析
运维·python·自动化·网络爬虫
AI科技星2 小时前
空间螺旋电磁耦合常数 Z‘:拨开迷雾,让电磁力变得直观易懂
服务器·人工智能·科技·算法·生活
玄同7652 小时前
Python 异常捕获与处理:从基础语法到工程化实践的万字深度指南
开发语言·人工智能·python·自然语言处理·正则表达式·nlp·知识图谱
云说智树2 小时前
从硅基劳动力到智能工厂:研华iFactory.AI Agent重塑制造新质生产力
人工智能
Coder个人博客2 小时前
Llama.cpp GGML 模块深度分析
人工智能·自动驾驶·llama
Das12 小时前
【机器学习】02_线性模型
人工智能·机器学习
quant_19862 小时前
BTC 行情预警系统实战教程
开发语言·后端·python·websocket·程序人生·金融
用户5191495848452 小时前
Apache Tomcat CVE-2025-24813漏洞检测工具
人工智能·aigc
yongui478342 小时前
基于BP_Adaboost的分类器和RBF神经网络回归的实现方法
人工智能·神经网络·回归