CAPSOLVER
博客
如何用Python解决图片验证码

如何用Python解决图像验证码

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

03-Dec-2025


简介

图像到文本的验证码是互联网上最常见的机器人验证形式之一。它们显示包含扭曲、变形或遮挡字符的图像,并要求用户正确识别并输入文本以证明自己是人类。对于从事网络爬虫或自动化的开发者来说,这些验证码是一个常见的障碍。

幸运的是,借助人工智能驱动的识别服务,这一过程可以轻松自动化。本指南将向您展示如何使用 Python 和 CapSolver 服务快速且准确地解决图像验证码。

⚙️ 前提条件

在开始之前,请确保您已具备以下条件:

  • 已安装 Python:确保您的系统上已安装 Python。
  • CapSolver API 密钥:您需要一个 CapSolver 账户,以便从仪表板获取 API 密钥。

🤖 步骤 1:安装必要的 Python 包

首先,您需要安装官方的 CapSolver Python 库。该包简化了与 CapSolver API 的交互。打开终端并运行以下命令:

bash 复制代码
pip install capsolver

👨‍💻 步骤 2:编写 Python 代码以解决图像验证码

以下 Python 脚本演示了如何使用 CapSolver 解决图像验证码。此代码的核心是 ImageToTextTask,它利用 CapSolver 强大的 视觉引擎 来识别图像中的文本。

更新后的 Python 代码

此代码更加模块化,并包含处理本地图像文件和图像 URL 的函数,使其适用于不同的使用场景。

python 复制代码
import capsolver
import base64
import requests
from io import BytesIO

# -------------------请修改这些值-------------------
# 从 CapSolver 仪表板获取的 API 密钥
CAPSOLVER_API_KEY = "Your_API_KEY"
# ----------------------------------------------------

def setup_capsolver():
    """设置 CapSolver API 密钥。"""
    capsolver.api_key = CAPSOLVER_API_KEY

def get_base64_from_image(source, is_url=False):
    """
    将图像文件或 URL 转换为 Base64 编码的字符串。
    :param source: 图像的路径(本地文件)或 URL。
    :param is_url: 如果 source 是 URL,则为 True。
    :return: Base64 编码的字符串,或在失败时返回 None。
    """
    try:
        if is_url:
            response = requests.get(source)
            response.raise_for_status()  # 对于错误的状态码抛出异常
            image_bytes = BytesIO(response.content)
        else:
            with open(source, 'rb') as image_file:
                image_bytes = BytesIO(image_file.read())
        
        base64_string = base64.b64encode(image_bytes.read()).decode('utf-8')
        return base64_string
    except requests.exceptions.RequestException as e:
        print(f"无法从 URL 获取图像: {e}")
        return None
    except FileNotFoundError:
        print(f"错误:在 {source} 找不到文件")
        return None
    except Exception as e:
        print(f"转换图像为 Base64 时发生错误: {e}")
        return None

def solve_image_captcha(base64_image, module_name="common"):
    """
    使用 CapSolver 解决图像验证码。
    :param base64_image: Base64 编码的图像字符串。
    :param module_name: 识别模块,'common' 用于通用目的。
    :return: 解决方案对象,或在失败时返回 None。
    """
    print("正在将图像验证码任务提交给 CapSolver...")
    try:
        solution = capsolver.solve({
            "type": "ImageToTextTask",
            "module": module_name,
            "body": base64_image
        })
        return solution
    except Exception as e:
        print(f"解决验证码时发生错误: {e}")
        return None

def main():
    """主函数以执行整个流程。"""
    setup_capsolver()

    # --- 示例 1:使用本地图像文件 ---
    print("--- 示例 1:使用本地图像文件 ---")
    local_image_path = "your/captcha/image/path.jpg"  # 将此替换为您的图像路径
    base64_from_file = get_base64_from_image(local_image_path)
    
    if base64_from_file:
        solution = solve_image_captcha(base64_from_file)
        if solution:
            print("解决方案文本:", solution.get("text"))

    print("\n" + "="*30 + "\n")

    # --- 示例 2:使用图像 URL ---
    print("--- 示例 2:使用图像 URL ---")
    image_url = "https://i.postimg.cc/B6hK2V19/captcha-example.png" # 示例图像 URL
    base64_from_url = get_base64_from_image(image_url, is_url=True)

    if base64_from_url:
        solution = solve_image_captcha(base64_from_url)
        if solution:
            print("解决方案文本:", solution.get("text"))


if __name__ == "__main__":
    main()

⚠️ 需要修改的重要变量

在运行代码之前,请务必修改以下内容:

  • CAPSOLVER_API_KEY:在 CapSolver 仪表板 中找到您的 API 密钥,并替换占位符。
  • local_image_path(在 main 函数中):如果您想测试本地图像,请将其替换为实际的验证码图像文件路径。

结论

通过将 CapSolver 集成到您的 Python 脚本中,您可以完全自动化识别图像验证码的过程。这种方法不仅高效准确,还能让您摆脱解决这些挑战的重复性手动劳动。对于涉及大规模数据收集或自动化测试的项目,这是一项关键的效率提升。如果您有兴趣解决更复杂的验证码类型,可以学习 如何使用 Playwright 解决 reCAPTCHA v2,这展示了在浏览器自动化环境中处理动态挑战的方法。

常见问题 (FAQ)

Q1: CapSolver 的识别准确率如何?
A1: CapSolver 使用先进的 AI 模型,对大多数标准图像验证码具有很高的准确率。准确率会根据验证码的复杂性(例如扭曲程度、背景噪声)而有所不同。

Q2: module 参数的作用是什么?
A2: module 参数允许您指定特定的识别引擎,以优化某种验证码类型的性能。common 是适用于大多数情况的通用模块。对于更专业的模块,请参阅 官方 ImageToTextTask 文档

Q3: 我能否直接在网页爬虫中使用此方法?
A3: 当然可以。一旦获得识别文本,您可以使用它来填写验证码表单,并继续进行爬虫或自动化流程。此方法可以无缝集成到任何 Python 项目中。

Q4: CapSolver 是否支持除 Python 以外的其他语言?
A4: 是的。CapSolver 为多种编程语言(包括 Node.js、Go 等)提供库和 API 端点,使它易于集成到几乎任何技术栈中。

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

更多