Python3实现的简单验证码识别功能示例

  

本文实例讲述了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实现的简单验证码识别功能示例