前言

验证码?我也能破解?
关于验证码的介绍就不多说了,各种各样的验证码在人们生活中时不时就会冒出来,身为学生日常接触最多的就是教务处系统的验证码了,比如如下的验证码:
识别办法
模拟登陆有着复杂的步骤,在这里咱们不管其他操作,只负责根据输入的一张验证码图片返回一个答案字符串。
我们知道验证码为了制作干扰,会把图片弄成五颜六色的样子,而我们首先就是要去除这些干扰,这一步就需要不断试验了,增强图片色彩,加大对比度等等都可以产生帮助。
在经过各种对图片的操作之后,终于找到了比较完美的去除干扰方案。可以看到在去除干扰之后,最优情况下,我们将得到一张十分纯净的黑白字符图片。一张图片上有四个字符,没办法一下子就把四个字符全部识别,需要把图片进行裁剪,裁剪成每张小图只有一个字符的样子,再对每张图片分别进行识别。
接下来就是识别文字了,我们首先把得到的小图转换成01表示的矩阵,每个矩阵代表一个字符。
比如数字六的矩阵
num_6=[ 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,0,0, 0,0,0,0,1,1,1,0,0,0,0,0,0, 0,0,0,1,1,1,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0,0,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,1,0,0,0,0,0, 0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,0,0,0,0,1,1,1,0,0,0, 0,1,1,0,0,0,0,0,1,1,0,0,0, 0,1,1,0,0,0,0,0,1,1,0,0,0, 0,1,1,1,0,0,0,1,1,1,0,0,0, 0,0,1,1,1,1,1,1,1,0,0,0,0, 0,0,0,1,1,1,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, ]
远远望过去,眯着眼睛还是能分辨出来的。
因为验证码十分规整,每个数字所在的位置都是固定的,所以并不需要涉及什么机器学习的算法,只是简单的进行一下矩阵的比对就可以了,在所有的实现做好的矩阵中找到相似度最高的矩阵就可以了,在这里的比对方法多种多样,反正数据简单能正确识别出来就好。
至此,咱们的验证码识别工作就结束了。
这次进行的验证码识别主要采用python的PIL进行图片操作,模拟登陆自动填写验证码的全部代码请看这里:
示例代码
# -*- coding: utf-8 -*
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import re
import requests
import io
import os
import json
from PIL import Image
from PIL import ImageEnhance
from bs4 import BeautifulSoup
import mdata
class Student:
def __init__(self, user,password):
self.user = str(user)
self.password = str(password)
self.s = requests.Session()
def login(self):
url = "http://202.118.31.197/ACTIONLOGON.APPPROCESS?mode=4"
res = self.s.get(url).text
imageUrl = 'http://202.118.31.197/'+re.findall('<img src="(.+?)" width="55"',res)[0]
im = Image.open(io.BytesIO(self.s.get(imageUrl).content))
enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(7)
x,y = im.size
for i in range(y):
for j in range(x):
if (im.getpixel((j,i))!=(0,0,0)):
im.putpixel((j,i),(255,255,255))
num = [6,19,32,45]
verifyCode = ""
for i in range(4):
a = im.crop((num[i],0,num[i]+13,20))
l=[]
x,y = a.size
for i in range(y):
for j in range(x):
if (a.getpixel((j,i))==(0,0,0)):
l.append(1)
else:
l.append(0)
his=0
chrr="";
for i in mdata.data:
r=0;
for j in range(260):
if(l[j]==mdata.data[i][j]):
r+=1
if(r>his):
his=r
chrr=i
verifyCode+=chrr
# print "辅助输入验证码完毕:",verifyCode
data= {
'WebUserNO':str(self.user),
'Password':str(self.password),
'Agnomen':verifyCode,
}
url = "http://202.118.31.197/ACTIONLOGON.APPPROCESS?mode=4"
t = self.s.post(url,data=data).text
if re.findall("images/Logout2",t)==[]:
l = '[0,"'+re.findall('alert((.+?));',t)[1][1][2:-2]+'"]'+" "+self.user+" "+self.password+"\n"
# print l
# return '[0,"'+re.findall('alert((.+?));',t)[1][1][2:-2]+'"]'
return [False,l]
else:
l = '登录成功 '+re.findall('! (.+?) ',t)[0]+" "+self.user+" "+self.password+"\n"
# print l
return [True,l]
def getInfo(self):
imageUrl = 'http://202.118.31.197/ACTIONDSPUSERPHOTO.APPPROCESS'
data = self.s.get('http://202.118.31.197/ACTIONQUERYBASESTUDENTINFO.APPPROCESS?mode=3').text #学籍信息
data = BeautifulSoup(data,"lxml")
q = data.find_all("table",attrs={'align':"left"})
a = []
for i in q[0]:
if type(i)==type(q[0]) :
for j in i :
if type(j) ==type(i):
a.append(j.text)
for i in q[1]:
if type(i)==type(q[1]) :
for j in i :
if type(j) ==type(i):
a.append(j.text)
data = {}
for i in range(1,len(a),2):
data[a[i-1]]=a[i]
# data['照片'] = io.BytesIO(self.s.get(imageUrl).content)
return json.dumps(data)
def getPic(self):
imageUrl = 'http://202.118.31.197/ACTIONDSPUSERPHOTO.APPPROCESS'
pic = Image.open(io.BytesIO(self.s.get(imageUrl).content))
return pic
def getScore(self):
score = self.s.get('http://202.118.31.197/ACTIONQUERYSTUDENTSCORE.APPPROCESS').text #成绩单
score = BeautifulSoup(score, "lxml")
q = score.find_all(attrs={'height':"36"})[0]
point = q.text
print point[point.find('平均学分绩点'):]
table = score.html.body.table
people = table.find_all(attrs={'height' : '36'})[0].string
r = table.find_all('table',attrs={'align' : 'left'})[0].find_all('tr')
subject = []
lesson = []
for i in r[0]:
if type(r[0])==type(i):
subject.append(i.string)
for i in r:
k=0
temp = {}
for j in i:
if type(r[0])==type(j):
temp[subject[k]] = j.string
k+=1
lesson.append(temp)
lesson.pop()
lesson.pop(0)
return json.dumps(lesson)
def logoff(self):
return self.s.get('http://202.118.31.197/ACTIONLOGOUT.APPPROCESS').text
if __name__ == "__main__":
a = Student(20150000,20150000)
r = a.login()
print r[1]
if r[0]:
r = json.loads(a.getScore())
for i in r:
for j in i:
print i[j],
print
q = json.loads(a.getInfo())
for i in q:
print i,q[i]
a.getPic().show()
a.logoff()
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python
# 验证码训练
# 识别验证码
# python识别图片验证码
# python验证码识别的实例详解
# Python验证码识别处理实例
# python验证码识别教程之利用滴水算法分割图片
# 详解Python验证码识别
# python简单验证码识别的实现方法
# 用Python进行简单图像识别(验证码)
# python脚本实现验证码识别
# python爬虫之验证码篇3-滑动验证码识别技术
# Python验证码识别的方法
# python简单验证码识别的实现过程
# 验证码
# 在这里
# 就可以
# 比对
# 小图
# 都是
# 就会
# 最多
# 说了
# 就好
# 也能
# 不多
# 上有
# 要去
# 没办法
# 就把
# 可以看到
# 只有一个
# 多种多样
# 会把
相关文章:
c# 在ASP.NET Core中管理和取消后台任务
购物网站制作公司有哪些,哪个购物网站比较好?
制作宣传网站的软件,小红书可以宣传网站吗?
装修招标网站设计制作流程,装修招标流程?
如何快速搭建支持数据库操作的智能建站平台?
如何高效完成独享虚拟主机建站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站上传速度慢?如何优化加速网站加载效率?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何做网站制作流程,*游戏网站怎么搭建?
建站之星如何防范黑客攻击与数据泄露?
利用JavaScript实现拖拽改变元素大小
如何在局域网内绑定自建网站域名?
长沙做网站要多少钱,长沙国安网络怎么样?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
安徽网站建设与外贸建站服务专业定制方案
如何挑选高效建站主机与优质域名?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
北京专业网站制作设计师招聘,北京白云观官方网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
广州建站公司哪家好?十大优质服务商推荐
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何在阿里云购买域名并搭建网站?
设计网站制作公司有哪些,制作网页教程?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
音乐网站服务器如何优化API响应速度?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
建站主机如何安装配置?新手必看操作指南
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何选择建站程序?包含哪些必备功能与类型?
建站之星×万网:智能建站系统+自助建站平台一键生成
浅析上传头像示例及其注意事项
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何选择靠谱的建站公司加盟品牌?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
家庭服务器如何搭建个人网站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机SSH密钥生成步骤及常见问题解答?
如何在西部数码注册域名并快速搭建网站?
建站之星后台密码遗忘如何找回?
山东网站制作公司有哪些,山东大源集团官网?
如何选择CMS系统实现快速建站与SEO优化?
广州美橙建站如何快速搭建多端合一网站?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
如何快速搭建高效WAP手机网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。