• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

这篇文章主要介绍了Python3实现的简单验证码识别功能,涉及Python针对验证码图片识别处理相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python3实现的简单验证码识别功能。分享给大家供大家参考,具体如下:

这次的需求是自动登录某机构网站, 其验证码很具特色, 很适合做验证码识别入门demo, 先贴主要代码, 其中图片对比使用了编辑距离算法, 脚本使用了pillow库

from PIL import Imageimport requestsimport resplitter = re.compile(r'\d{30}') # 分割二值化后的图片# distance('11110000', '00000000')# 比较两个字符串有多少位不同, 返回不同的位数def distance(string1, string2):  d_str1 = len(string1)  d_str2 = len(string2)  d_arr = [[0] * d_st<div>本文来源gaodai.ma#com搞#代!码网_</div>r2 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# 去除字符串里面连续的1def 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_resultopener = requests.session()res = opener.get('http://60.211.254.236:8402/Ajax/ValidCodeImg.ashx').contentwith 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 = 0str1 = ''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 0arr1 = []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?Method=G3_Login'# login_data = {#   'loginname': usn,#   'password': pwd,#   'validcode': result,## }# opener.get(login_url, login_data)

相关推荐:

Python3 中把txt数据文件读入到矩阵中的方法

以上就是Python3实现的简单验证码识别功能示例的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python3实现的简单验证码识别功能示例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址