热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何通过Python做文字识别到破解图片验证码

这篇文章给大家分享的是有关如何通过Python做文字识别到破解图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看

这篇文章给大家分享的是有关如何通过Python做文字识别到破解图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前期准备

1. 安装包,直接在终端上输入pip指令即可:

# 发送浏览器请求
pip3 install requests
# 文字识别
pip3 install pytesseract
# 图片处理
pip3 install Pillow

2. 新建项目

需要的模块安装好后,新建一个项目wordsDistinguish。

在项目包下新建三个.py文件

test_pytesseract 和 test_pillow、case_verification。

test_pytesseract:模块 pytesseract 的基本使用测试
test_pillow:模块 Pillow 的基本使用测试
case_verification:实战案例,破解网站图片验证码验证

涉及知识

1.Pillow 中的 Image

Python图像库中最重要的类是 Image,在模块中定义的具有相同名称的类。

可以通过多种方式创建此类的实例; 通过从文件加载图像,处理其他图像或从头开始创建图像。

# -*- coding: utf-8 -*-


# 注意:print_function的导入必须在Image之前,否则会报错
from __future__ import print_function
from PIL import Image
"""
pillow 模块 中 Image 的基本使用
"""


# 1.打开图片
im = Image.open("../wordsDistinguish/test1.jpg")
print(im)

# 2.查看图片文件内容
print("图片文件格式:"+im.format)
print("图片大小:"+str(im.size))
print("图片模式:"+im.mode)

# 3.显示当前图片对象
im.show()

# 4.修改图片大小,格式,保存
size = (50, 50)
im.thumbnail(size)
im.save("1.jpg", "PNG")

# 5.图片模式转化并保存,L 表示灰度 RGB 表示彩色
im = im.convert("L")
im.save("test1.jpg")

2. 基于 Tesseract-OCR 的 pytesseract

Python-tesseract是python的光学字符识别(OCR)工具。也就是说,它将识别并“读取”嵌入图像中的文本。

Python-tesseract是Google的Tesseract-OCR引擎的包装器。

它作为独立的调用脚本也很有用,因为它可以读取Pillow和Leptonica成像库支持的所有图像类型,包括jpeg,png,gif,bmp,tiff等。

此外,如果用作脚本,Python-tesseract将打印已识别的文本,而不是将其写入文件。

要在你的电脑上使用pytesseract模块,你还需要安装 Tesseract-OCR ,Mac上安装该工具我比较建议使用Homebrew,安装好后,直接在终端输入下面指令即可:

如何通过Python做文字识别到破解图片验证码

Windows下安装的话直接下载包即可,然后把其加入系统环境变量(即加入Path里),比较傻白甜,可以百度一下。

# -*- coding: utf-8 -*-

# 从 Pillow 中导入图片处理模块 Image
from PIL import Image
# 导入基于 Tesseract 的文字识别模块 pytesseract
import pytesseract
"""
@pytesseract:https://github.com/madmaze/pytesseract
"""

# 打开图片
im = Image.open("../wordsDistinguish/Resources/1.jpg")
# 识别图片内容
text = pytesseract.image_to_string(im)
print(text)

如何通过Python做文字识别到破解图片验证码

1. 准备过程

登录过程中需要输入三个数据:账号、密码、验证码,首先在浏览器内实际登录一次,按F12查看登录流程。

输入账号密码,和验证码,点击登录,注意Network内的变化。

如何通过Python做文字识别到破解图片验证码

2. 代码敲起来

现在模拟登录过程的难点主要有:验证码的识别和传递。

a.验证码识别我们根据前面的知识知识里的,直接采用pytesseract模块。b.登录参数传递,利用requests库发送post请求即可,问题是如何把验证码和登录联系起来.

通过前面分析我们知道

验证码是在

“https://so.gushiwen.org/RandCode.ashx”里生成的,

而登录页面是

“https://so.gushiwen.org/user/login.aspx”,分析发现。

正常浏览器登录这两个网址的COOKIE是一致的,并且都带有时间戳,所以,只要在代码请求时保证两者的COOKIE一致即可,这里我们利用requests库的session方法可以实现。

# -*- coding: utf-8 -*-

# 从 Pillow 中导入图片处理模块 Image
from PIL import Image
# 导入基于 Tesseract 的文字识别模块 pytesseract
import pytesseract
# 导入发送网络请求的库 requests
import requests
# 导入正则库 re
import re
"""
模拟登录,破解字母数字图片验证码
目标网站:https://so.gushiwen.org
"""
# 请求头
headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
    }
# 通过requests 创建一个 session 会话,保持两次访问 COOKIE 值相同
session = requests.session()


# 下载识别验证码图片函数
def get_verification():
    # 生成验证码图片url
    url = "https://so.gushiwen.org/RandCode.ashx"
    # 通过session发送get请求,获取验证码
    resp = session.get(url, headers=headers)
    # 将验证码保证到本地
    with open(r"../wordsDistinguish/Resources/test.jpg", 'wb') as f:
        f.write(resp.content)
    # 打开验证码图片文件
    im = Image.open(r"../wordsDistinguish/Resources/test.jpg")
    # 基本处理,灰度处理,提升识别准确率
    # 保存处理后的图片
    im.save("test.jpg")
    # 利用pytesseract进行图片内容识别
    text = pytesseract.image_to_string(im)
    # 去除识别结果中的非数字/字母内容
    text = re.sub("\W", "", text)
    # 返回验证码内容
    return text


def do_login():

    i = 0   # 识别错误次数
    # 获取验证码
    captcha = get_verification()
    # 基本检验,验证码位数必须为四位
    while len(captcha) != 4:
        captcha = get_verification()
        i = i + 1  # i+=1
        print("第%d次识别错误" % i)

    print("开始登录,验证码为:"+captcha)
    # 传递的登录参数
    data = {
        "from": "http://so.gushiwen.org/user/collect.aspx",
        "email": "你的注册邮箱",
        "pwd": "你的登录密码",
        "code": captcha,
        "denglu": "登录"
    }
    # 登录地址
    url = "https://so.gushiwen.org/user/login.aspx"
    # 利用 session 发送post请求
    response = session.post(url, headers=headers, data=data)
    # 打印登录后的状态码
    print(response.status_code)
    # 保存登录后的页面内容,进一步确认是否登录成功
    with open("gsww.html", encoding="utf-8", mode="w") as f:
        f.write(response.content.decode())


# 开始程序
if __name__ == "__main__":
    do_login()

3. 运行结果

a.控制台显示一次验证成功,返回状态码为:200,访问正常。

如何通过Python做文字识别到破解图片验证码

b.进一步检查,对获取到的源码进行检查

我们在浏览器观察登录后的页面发现,只有登录后的页面才有账号管理模块。

其中有用户的唯一标识:绑定邮箱的后几位,我的是50471@qq.com。

如何通过Python做文字识别到破解图片验证码

感谢各位的阅读!关于“如何通过Python做文字识别到破解图片验证码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
author-avatar
无声无无为爱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有