博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为了更准确的验证码而奋斗-云大urp教务系统大作战(1.5)
阅读量:5889 次
发布时间:2019-06-19

本文共 2471 字,大约阅读时间需要 8 分钟。

在上一节验证码爬取并识别中我们通过阿里云市场的api识别了验证码,不过验证码的正确率经测试只有60%左右登录了10次,失败了4次

  1. 作为一个稳重的程序员,怎么能像天气预报一样不靠谱呢。因此我又写了一段程序,通过对于服务器不停的登录请求,来验证我们的验证码值是否正确,并把错误的存入一个新的error.txt文件。
  2. 对于error.txt的内容我又通过一个简易的gui小程序进行人工的肉眼暴力识别。

产生错误列表文件的代码:

import jsonimport requestsfrom requests import exceptions#此处打开的文件为上一节识别的验证码字典表fr = open('dict.txt','r')dic = dict()for line in fr:    line = line.strip().split(',')    dic[line[0]] = line[1]# print(dic)fr.close()URL = 'http://202.203.209.96/v5api/api/GetLoginCaptchaInfo/f525199d-9d7b-4547-9094-1528bed37496'headers={'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'}##请求当然要暴力一点,先来他个100万for x in xrange(1,1000000):    response = requests.get(URL,headers=headers)    imgguid  = response.json()['ImgGuid']    caputre  = dic[imgguid]    tempguid = response.json()['TempGuid']    url2 = 'http://202.203.209.96/v5api/OAuth/Token'    response2 = requests.post(url2,headers=headers,data={'grant_type':'password','username':'20141120273','password':'tudoudou5283|%s*%s'%(caputre,tempguid),'client_id':'ynumisSite'})    # print response2.request.headers    print response2.status_code    errorcode =set()    if(response2.status_code !=200):        errorcode.add(imgguid)        fw = open('error.txt','a')        fw.write(str(imgguid)+'\n')        fw.close()    jsonobj = json.loads(response2.text)

上面代码中涉及到的一点模拟登陆验证的代码请参照模拟登陆小节。

此时我们已经拥有了一个error.txt

我们下一步通过gui来对于该error内容进行识别。

GUi代码:

#encoding: utf-8 from Tkinter import *list=[]with open('error.txt') as f:    for line in f.readlines():        list.append('.'.join([line[:-1],'gif']))list2={}root=Tk()root.geometry('200x120')filename=list.pop()photo=PhotoImage(file=filename)img=Label(root,image=photo)img.pack()def get_code(event,img):    global photo    global filename    global list2    list2[filename]=code_text.get()    code_text.set("")    with open("right.txt",'a') as m:        m.write(filename[:-4]+','+list2[filename]+"\n")    filename=list.pop()    photo=PhotoImage(file=filename)    img["image"]=photo    print list2    print filename    def get_code_Adaptor(fun,**kwds):    return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)    code_text=StringVar()code=Entry(root,textvariable=code_text)code.focus_set()code.bind('
',get_code_Adaptor(get_code,img=img))code.pack()button=Button(root,text='Press Enter',command=get_code_Adaptor(get_code,img=img))button.pack()root.mainloop()
验证码gui程序

转载地址:http://kzwsx.baihongyu.com/

你可能感兴趣的文章
iphone 线程 NSCondition NSThread
查看>>
NSURLConnection下载文件并显示进度(HEAD)
查看>>
在Firefox中使用超级Bookmarklet
查看>>
Content type and column用法示例代码来自SharePoint会议
查看>>
JAVA开发常用类(五)
查看>>
设置让EditPlus不产生BAK文件
查看>>
php内置函数实例教程
查看>>
为了有利于保护安全性,Internet 已限制网页运行可以访问计算机的脚本……”...
查看>>
设计模式:外观模式(Façade Pattern)
查看>>
VC:画图
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Entity Framework Code First 的用途 和 原理 -摘自网络
查看>>
百度api基本功能与dragging事件的实现
查看>>
iphone开发必知点之--app本地化
查看>>
详细介绍ORACLE sqlplus命令(转)
查看>>
Eclipse SDK更新带来的问题及其总结
查看>>
树莓派使用usb无线适配器
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
C语言字节对齐
查看>>
浅谈Exchange Server邮件存储系统-原理篇(1)
查看>>