ECUST 教务处 验证码 hack

前言

原来不要验证码,爬虫写得很爽。结果今年搞了一个验证码,一下把之前的爬虫根源上斩杀了。
之前试过几次,想实在不行就用机器学习来破解吧(虽然我并不会)
然而,突然有一天开窍了。
不用机器学习!不到20行代码!成功率50%以上!
(可以通过保存cookies的方式,在cookies未过期的时间内可以直接带cookies访问需要资源)
代码如下:

from pytesseract import *
from PIL import Image
import os
import requests
def solve(filename):
    gif_url = 'http://inquiry.ecust.edu.cn/ecustedu/Base/VerifyCode.aspx'
    gif = requests.get(gif_url)
    with open('./{}.gif'.format(filename), 'wb') as file:
        file.write(gif.content)
    s = filename
    os.system("magick.exe convert ./{}.gif ./{}.jpg".format(s, s))
    os.system("magick.exe convert -colorspace Gray ./{}.jpg ./{}.jpg".format(s, s))
    os.system("magick.exe convert -resize 500% ./{}.jpg ./{}-gray.jpg".format(s, s))
    img = Image.open("./{}-gray.jpg".format(s))
    ans = pytesseract.image_to_string(img, config='-c tessedit_char_whitelist=BDFHJLNPRTVXZ02468 -psm 9').strip()
    return ans
if __name__ == '__main__':
    print(solve('test'))

1行1行看

import

tesseract

pytesseract 这个库,对tesseract进行了封装。
所以关键是tesseract
tesseract是什么呢?
是一款Google推出的OCR Engine.
有人或许会说,OCR还能识别验证码?
那当然了,因为学校的验证码长这样的
这里写图片描述
只能用方正来形容了。
所以,要运行这个代码第一步,就是装一个tesseract,并把它加到环境变量PATH里去。
至于怎么装,看github上的wiki吧

PIL

PIL这个库,或者说pillow这个库,是著名的python图像处理库。
当然,这里并没有用到PIL的高级功能,唯一的用处,就是生成一个img对象,作为参数,传给pytesseract

OS

os 这个就是用来执行命令的

requests

著名的http库,这里用处就是把验证码图片.gif文件给下载下来。
Linux下还有wget可以用,但是Windows并没有,所以这是一个好方法。并且requests还是保存session和cookies,这个非常重要,但是这个Demo里面没有。

保存图片

这样就把导入的库说完了。然后直接看代码吧。

def solve(filename):
    gif_url = 'http://inquiry.ecust.edu.cn/ecustedu/Base/VerifyCode.aspx'
    gif = requests.get(gif_url)
    with open('./{}.gif'.format(filename), 'wb') as file:
        file.write(gif.content)

这几行,就是把验证码图片下载下来,存到filename.gif里面

核心步骤 1

os.system("magick.exe convert ./{}.gif ./{}.jpg".format(s, s))
    os.system("magick.exe convert -colorspace Gray ./{}.jpg ./{}.jpg".format(s, s))
    os.system("magick.exe convert -resize 500% ./{}.jpg ./{}-gray.jpg".format(s, s))
    img = Image.open("./{}-gray.jpg".format(s))

magick.exe 是 imagemagick的windows可执行文件。(当然也要加到PATH里去了)。
imagemagick 是一个超级强大的命令行处理图片工具,这里用了3个功能
1. 把.gif 转成 .jpg, 为什么?
因为tesseract不支持gif
2. 把.jpg 转成 灰度 为什么?
因为灰度好识别,文字和颜色当然没关系了
- 为什么不转成黑白?
- 效果没有灰度的好
3. 放大5倍 为什么?
原来图片太小,tesseract识别不了
总之经过一通操作之后,图片变成了
这里写图片描述

核心步骤2

    img = Image.open("./{}-gray.jpg".format(s))
    ans = pytesseract.image_to_string(img, config='-c tessedit_char_whitelist=BDFHJLNPRTVXZ02468 -psm 9').strip()

就是调用tesseract去识别这个图片
关键是啥?
1. config
第一个 whitelist 白名单
经过我统计加大胆猜测加小心求证,只会出现偶数字符(即BDFHJ…),一下少了一半,那在只在这里面识别,识别率岂不是大大增加?
2. psm pagesegmode

Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
来源: https://github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage

经过我实验,参数为9时,识别率最高。

综上

就这么Hack了学校教务处的验证码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值