本文实例讲述了Python3实现的简单验证码识别功能。分享给大家供大家参考,具体如下:
这次的需求是自动登录某机构网站, 其验证码很具特色, 很适合做验证码识别入门demo, 先贴主要代码, 其中图片对比使用了编辑距离算法, 脚本使用了pillow库
from PIL import Image import requests import re splitter = re.compile(r'\d{30}') # 分割二值化后的图片 # distance('11110000', '00000000') # 比较两个字符串有多少位不同, 返回不同的位数 def distance(string1, string2): d_str1 = len(string1) d_str2 = len(string2) d_arr = [[0] * d_str2 for i in range(d_str1)] for i in range(d_str1): for j in range(d_str2): if string1[i] == string2[j]: if i == 0 and j == 0: d_arr[i][j] = 0 elif i != 0 and j == 0: d_arr[i][j] = d_arr[i - 1][j] elif i == 0 and j != 0: d_arr[i][j] = d_arr[i][j - 1] else: d_arr[i][j] = d_arr[i - 1][j - 1] else: if i == 0 and j == 0: d_arr[i][j] = 1 elif i != 0 and j == 0: d_arr[i][j] = d_arr[i - 1][j] + 1 elif i == 0 and j != 0: d_arr[i][j] = d_arr[i][j - 1] + 1 else: d_arr[i][j] = min(d_arr[i][j - 1], d_arr[i - 1][j], d_arr[i - 1][j - 1]) + 1 current = max(d_arr[d_str1 - 1][d_str2 - 1], abs(d_str2 - d_str1)) # print("Levenshtein Distance is",current) # print(current) return current # 去除字符串里面连续的1 def no_one(string): n_arr = splitter.findall(string) n_arr = filter(lambda each_str: each_str != '111111111111111111111111111111', n_arr) n_result = '' for n_each in n_arr: n_result += str(n_each) return n_result opener = requests.session() res = opener.get('http://60.211.254.236:8402/Ajax/ValidCodeImg.ashx').content with open('verify.gif', 'wb') as v: v.write(res) img = Image.open('verify.gif') img = img.convert('L') size = img.size # img = img.point(table, '1') img_arr = img.load() # for x in range(size[0]): # for y in range(size[1]): # if img_arr[x, y] > 210: # img_arr[x, y] = 1 # else: # img_arr[x, y] = 0 # img.save('after.gif') inc = 0 str1 = '' str2 = '' str3 = '' cur_str = '' for x in range(size[0]): for y in range(size[1]): if img_arr[x, y] > 210: cur_str += '1' else: cur_str += '0' # print(img_arr[i, j], end='') # cur_str += str(img_arr[x, y]) inc += 1 # if inc % 18 == 0: # print('\n----') # else: # print('') if inc == 18: str1 = cur_str cur_str = '' elif inc == 36: str2 = cur_str cur_str = '' elif inc == 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') # print(str1) # print(str3) with open('./dict/plus') as plus: with open('./dict/minus') as minus: p = plus.read() m = minus.read() is_add = 1 if distance(p, str2) < distance(m, str2) else 0 arr1 = [] arr3 = [] for each in range(1, 10): with open('./dict/{}'.format(each)) as f: ff = f.read() arr1.append([each, distance(ff, str1)]) arr3.append([each, distance(ff, str3)]) arr1 = sorted(arr1, key=lambda item: item[1]) arr3 = sorted(arr3, key=lambda item: item[1]) result = arr1[0][0] + arr3[0][0] if is_add else arr1[0][0] - arr3[0][0] print(result) # login_url = 'http://60.211.254.236:8402/Ajax/Login.ashx"_blank" href="https://github.com/hldh214/validCode/" rel="external nofollow" >https://github.com/hldh214/validCode/更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
标签:
Python3,验证码,识别
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Python3实现的简单验证码识别功能示例”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]