本文实例讲述了Python3实现的简单验证码识别功能。分享给大家供大家参考,具体如下:
这次的需求是自动登录某机构网站,其验证码很具特色,很适合做验证码识别入门演示,先贴主要代码,其中图片对比使用了编辑距离算法,脚本使用了枕头库
从公益诉讼导入图像 进口的要求 进口再保险 分配器=re.compile (r \ d{30}) #分割二值化后的图片 #距离(' 11110000 ',' 00000000 ') #比较两个字符串有多少位不同,返回不同的位数 def距离(string1 string2相等): d_str1=len (string1) d_str2=len (string2相等) d_arr=[[0] * d_str2我的范围(d_str1)] 因为我在范围(d_str1): j的范围(d_str2): 如果string1[我]==string2相等[j]: 如果我==0和j==0: d_arr[我][j]=0 elif我!=0和j==0: d_arr[我][j]=d_arr [i - 1] [j] elif我==0和j !=0: d_arr[我][j]=d_arr[我][j - 1) 其他: d_arr[我][j]=d_arr [i - 1] [j - 1) 其他: 如果我==0和j==0: d_arr[我][j]=1 elif我!=0和j==0: d_arr[我][j]=d_arr [i - 1] [j] + 1 elif我==0和j !=0: d_arr[我][j]=d_arr[我][j - 1) + 1 其他: d_arr[我][j]=min (d_arr[我][j - 1], d_arr [i - 1] [j], d_arr [i - 1] [j - 1) + 1 当前=max (d_arr [d_str1 - 1] [d_str2 - 1], abs (d_str2 - d_str1)) #打印(“Levenshtein距离”,当前) #打印(当前) 返回当前 #去除字符串里面连续的1 def no_one(字符串): n_arr=splitter.findall(字符串) n_arr=过滤器(λeach_str: each_str !=' 111111111111111111111111111111 ', n_arr) n_result=" 在n_arr n_each: n_result +=str (n_each) 返回n_result 刀=requests.session () res=opener.get (http://60.211.254.236:8402/Ajax/ValidCodeImg.ashx) .content 与开放(的验证。v gif”、“白平衡”): v.write (res) img=Image.open (“verify.gif”) img=img.convert (L) 大?img.size # img=img。点(表,' 1 ') img_arr=img.load () # x的范围(大小[0]): # y的范围(大小[1]): #如果img_arr (x, y)比;210: # img_arr (x, y)=1 其他: # img_arr (x, y)=0 # img.save (“after.gif”) 公司=0 str1=" str2=" str3=" cur_str=" x的范围(大小[0]): y的范围(大小[1]): 如果img_arr (x, y)比;210: cur_str +=' 1 ' 其他: cur_str +=' 0 ' #打印(img_arr (i, j),结束=") # cur_str +=str (img_arr (x, y)) 公司+=1 #如果公司% 18==0: #打印(“\ n - - - - -”) 其他: # print () 如果公司==18: str1=cur_str cur_str=" elif公司==36: str2=cur_str cur_str=" elif公司==54: str3=cur_str cur_str=" str1=str1 [-60] str2=str2 [-60] str3=str3 [-60] str1=no_one (str1) str2=no_one (str2) str3=no_one (str3) str1=str1.strip (“1”) str2=str2.strip (“1”) str3=str3.strip (“1”) #打印(str1) #打印(str3) 张开(/dict/+) +: 张开(/dict/-) -: p=plus.read () m=minus.read () is_add=1如果距离(p, str2) & lt;距离(m, str2) 0 arr1=[] arr3=[] 为每个范围内(10): 张开(’。/dict/{} ' .format(每个)f: ff=f.read () arr1。追加([(ff str1)],距离) arr3。追加([(ff str3)],距离) arr1=排序(arr1关键=λ项目:项目[1]) arr3=排序(arr3关键=λ项目:项目[1]) 结果=arr1 [0] [0] + arr3[0][0]如果其他is_add arr1 [0] [0] - arr3 [0] [0] 打印(结果) # login_url=' http://60.211.254.236:8402 Ajax/Login.ashx& # 63;方法=G3_Login ' # login_data=https://www.yisu.com/zixun/{ #“loginname”:美国海军, #“密码”:pwd, #“validcode”:结果, # #} #。get (login_url login_data) >之前字库已经部署到GitHub地址:https://github.com/hldh314/validCode/
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》,《Python数据结构与算法教程》、《Python套接字编程技巧总结》,《Python函数使用技巧总结》,《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
Python3实现的简单验证码识别功能示例