首页 > 编程语言 >Python识别处理验证码技术详解

Python识别处理验证码技术详解

时间:2025-01-20 14:02:28浏览次数:3  
标签:OCR Python image 验证码 详解 pytesseract tesseract 识别

目录

一、验证码的种类

二、OCR技术简介

三、使用OCR技术识别验证码

1. 安装所需库

2. 下载和处理验证码图片

3. 使用OCR进行识别

4. 完整代码示例

四、处理复杂验证码

五、案例:识别古诗文网验证码

六、总结



验证码作为一种常见的安全手段,广泛应用于各种网站和应用中,以防止自动化脚本的恶意攻击。然而,在自动化测试或数据抓取过程中,识别验证码成为了一个不得不面对的问题。本文将详细介绍如何使用Python来识别和处理验证码,通过实际案例和代码,帮助读者理解整个流程。

一、验证码的种类

在介绍识别方法之前,我们先了解一下常见的验证码种类:

  • 计算验证码:需要用户进行简单的数学计算,如“3+5=?”。
  • 滑块验证码:用户需要将滑块拖动到正确的位置,以完成验证。
  • 识图验证码:通过识别图片中的字符或图案来完成验证。
  • 语音验证码:通过语音播报验证码内容,用户输入听到的内容。

本文重点介绍的是识图验证码的识别方法,因为这类验证码在自动化测试中最为常见。

二、OCR技术简介

OCR(Optical Character Recognition,光学字符识别)技术,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。OCR技术在验证码识别中扮演着重要角色。

Python中有多个OCR库可以使用,如tesseract、pytesseract、pyocr等。其中tesseract是Google开源的一个强大的OCR引擎,而pytesseract和pyocr都是对tesseract做了一层Python API封装,方便我们在Python中调用。

三、使用OCR技术识别验证码

1. 安装所需库

首先,我们需要安装tesseract引擎和pytesseract库。同时,还需要一些图像处理库,如PIL(Pillow)或OpenCV。

# 安装tesseract(以Windows为例)
# 下载tesseract安装包,并安装到指定目录,如C:\Program Files\Tesseract-OCR
 
# 安装pytesseract和Pillow
pip install pytesseract Pillow

安装完成后,需要配置pytesseract,使其能够找到tesseract的可执行文件。在Python代码中,可以通过设置pytesseract.pytesseract.tesseract_cmd来实现。

import pytesseract
 
# 设置tesseract可执行文件的路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

2. 下载和处理验证码图片

接下来,我们需要下载验证码图片,并进行一些预处理,以提高OCR的识别准确率。

import requests
from PIL import Image
 
# 下载验证码图片
url = 'https://example.com/captcha'  # 替换为实际的验证码URL
response = requests.get(url)
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)
 
# 打开图片并进行预处理
image = Image.open('captcha.jpg')
# 转换为灰度图像
gray_image = image.convert('L')
# 二值化处理
threshold = 127
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
binary_image = image.point(table, '1')

3. 使用OCR进行识别

经过预处理后,我们可以使用pytesseract将图片转换为文本。

# 使用pytesseract进行识别
text = pytesseract.image_to_string(binary_image)
print('识别结果:', text)

4. 完整代码示例

以下是一个完整的示例代码,展示了从下载验证码图片到识别文本的全过程。

import requests
from PIL import Image
import pytesseract
 
# 设置tesseract可执行文件的路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
 
# 下载验证码图片
url = 'https://example.com/captcha'  # 替换为实际的验证码URL
response = requests.get(url)
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)
 
# 打开图片并进行预处理
image = Image.open('captcha.jpg')
gray_image = image.convert('L')
threshold = 127
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
binary_image = image.point(table, '1')
 
# 使用pytesseract进行识别
text = pytesseract.image_to_string(binary_image)
print('识别结果:', text)

四、处理复杂验证码

对于一些复杂的验证码,如带有旋转、拼图、滑动等元素的验证码,OCR技术可能无法直接识别。这时,我们可以借助一些专业的打码平台。

打码平台是一种提供验证码识别服务的第三方平台,它们通常有专业的人工或机器来识别各种类型的验证码,然后通过API接口返回结果。当然,这种服务是需要付费的,价格根据验证码的难度和数量而不同。

Python中有多个打码平台的库可以使用,如chaojiying、yundama、ruokuai等。它们都提供了相应的API文档和示例代码,方便我们在Python中调用。

1. 注册并充值打码平台账号
首先,我们需要在打码平台上注册账号,并进行充值。充值后,我们可以获得API密钥和API接口地址。

2. 安装并导入打码平台库
以chaojiying为例,我们可以使用pip安装chaojiying的Python库。

pip install chaojiying

安装完成后,在Python代码中导入该库。

from chaojiying import Chaojiying_Client

3. 调用打码平台API进行识别

接下来,我们可以使用打码平台的API进行验证码识别。以下是一个示例代码。

from chaojiying import Chaojiying_Client
import requests
 
# 打码平台账号信息
username = 'your_username'  # 替换为你的账号
password = 'your_password'  # 替换为你的密码
soft_id = 'your_soft_id'    # 替换为你的软件ID
 
# 初始化打码平台客户端
client = Chaojiying_Client(username, password, soft_id)
 
# 下载验证码图片
url = 'https://example.com/captcha'  # 替换为实际的验证码URL
response = requests.get(url)
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)
 
# 调用打码平台API进行识别
im_path = 'captcha.jpg'
result = client.PostPic(im_path, '')
 
# 解析识别结果
if result['err_no'] == 0:
    print('识别结果:', result['pic_str'])
else:
    print('识别失败:', result['err_msg'])

五、案例:识别古诗文网验证码

以下是一个具体的案例,展示了如何使用Python识别古诗文网的验证码。

import requests
from PIL import Image
import pytesseract
 
# 设置tesseract可执行文件的路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
 
# 下载验证码图片
url = 'https://so.gushiwen.org/RandCode.ashx'
response = requests.get(url)
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)
 
# 打开图片并进行预处理
image = Image.open('captcha.jpg')
gray_image = image.convert('L')
threshold = 127
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
binary_image = image.point(table, '1')
 
# 使用pytesseract进行识别
text = pytesseract.image_to_string(binary_image)
print('识别结果:', text.strip())

六、总结

本文详细介绍了如何使用Python识别和处理验证码。通过OCR技术和打码平台,我们可以实现对简单和复杂验证码的识别。在实际应用中,我们需要根据验证码的类型和难度,选择合适的识别方法,并进行相应的预处理和后处理,以提高识别的准确率和稳定性。

希望本文能够帮助读者理解验证码识别的基本原理和流程,并能够在实际项目中应用所学知识。

标签:OCR,Python,image,验证码,详解,pytesseract,tesseract,识别
From: https://blog.csdn.net/weixin_43856625/article/details/145261154

相关文章

  • GBase UCASE 和 UPPER 函数详解
    UCASE 和 UPPER 是两个用于将字符串中的字符转换为大写形式的SQL函数。它们在数据处理、报告生成、文本分析以及各种需要统一字符串格式的场景中非常实用。通过这些函数,用户可以确保数据的一致性,方便后续的比较和分析操作。1. UCASE 和 UPPER 函数的基本语法这两个函数在......
  • JavaScript详解十二 ——事件概述、操作元素
    1、事件概述JS使我们有能力创建动态页面,而事件是可以被JS侦测的行为简单理解:触发----响应机制网页中每个元素都可以产生某些可以触发JS的事件,例如点击事件事件是由三部分组成事件源事件类型事件处理程序称为事件三要素事件源:事件被触发的对象谁被触发事件类型:如何触......
  • JavaScript详解十三 ——节点操作
    节点操作1、创建节点docment.createElement('节点')参数:标签名字符串这些元素原先不存在,是根据需求动态生成的,所以也成为动态创建元素节点,会将创建好的对象作为返回值返回2、创建文本document.createTextNode()可以用来创建一个文本节点对象参数:文本内容字符串,并将新的......
  • git常用命令详解
    一、gitstatus命令作用:用于显示当前工作目录和暂存区的状态。命令格式gitstatus显示内容详解Onbranchmaster:当前所在的分支是master分支Untrackedfiles:尚【未跟踪】的文件,通常是新建的文件,此时可以使用gitaddfile将其添加到暂存区,同时跟踪。Changesnotstagedfor......
  • Python 列表推导和生成器表达式的区别点
    列表推导(ListComprehensions)和生成器表达式(GeneratorExpressions)在Python中有着相似的语法,但它们的行为和用途有所不同。以下是两者之间的主要区别:1.内存使用列表推导:创建一个完整的列表,所有元素都会被立即计算并存储在内存中。squares_list=[x**2forxinrange(1......
  • Python 实战-优化排班表节省成本
    1.基础概念:理解排班表排班表,顾名思义,就是安排员工工作时间的表格。在餐馆中,它通常需要考虑员工的可用性、工作时间限制、用餐高峰时段等因素。2.使用列表存储员工信息首先,我们需要一个数据结构来存储员工信息。Python中的列表是一个不错的选择。#员工信息列表,包括姓名、......
  • [oeasy]python062_提示符是怎么来的_[词根溯源]prompt_input_输入函数_提示符
    提示符是怎么来的_[词根溯源]prompt_input_输入函数_提示符回忆上次内容上次讲的是从键盘输入变量的值 input函数可以接收到输入字符串存在变量里   添加图片注释,不超过140字(可选) input函数的参数叫prompt......
  • 【python 基础】Python 格式化输出 & 加号的使用
    1.百分号操作符(%)百分号操作符用于格式化输出,允许在字符串中插入占位符。常用格式说明:%s:字符串类型%d:整数类型%f:浮点数类型示例代码:name="Tom"age=20score=90.5gender="Male"print("Name:%s,Age:%d,Gender:%s,Score:%.2f"%(name,age,gender,......
  • ElasticSearch Python 使用
    目录依赖下载连接elasticsearch配置忽略响应状态码示例ElasticsearchforPython之操作结果过滤ElasticSearch(es对象)Indices(es.indices)Cluster(集群相关)Node(节点相关)Cat(一种查询方式)Snapshot(快照相关)Task(任务相关)依赖下载pipinstallelasticsearch#豆瓣源pipinstall-ihtt......
  • Linux top命令详解
    查看多核CPU命令mpstat -P ALL  和  sar -P ALL 说明:sar -P ALL > aaa.txt   重定向输出内容到文件 aaa.txt1top 命令,然后按数字“1”可监控每个逻辑CPU的状况:观察上图,服务器有8个逻辑CPU,实际上是1个物理CPU。如果不按1,则在top视图里面显示的是所有cpu......