国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3實現的簡單驗證碼識別功能示例

2020-02-22 23:57:54
字體:
來源:轉載
供稿:網友

本文實例講述了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_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# 去除字符串里面連續的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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 酒泉市| 延长县| 阳谷县| 新昌县| 台东市| 无为县| 禹城市| 宝应县| 烟台市| 灵丘县| 冷水江市| 句容市| 东平县| 甘德县| 台前县| 思南县| 栖霞市| 通河县| 葫芦岛市| 清河县| 濮阳县| 内丘县| 沂南县| 左贡县| 明溪县| 西贡区| 淮安市| 谢通门县| 建瓯市| 金昌市| 泰来县| 内黄县| 湛江市| 贵阳市| 噶尔县| 海丰县| 柯坪县| 娱乐| 桐庐县| 永善县| 安泽县|