Python用代碼實現驗證碼登錄


由於自己的工作需要,經常會用到這種需要輸入圖形驗證碼的登錄,網上也有很多方式。

經常會遇到需要模擬手工操作輸入驗證的時候,也看了很多的方法,最后想了一下,決定寫一個識別圖像驗證碼的腳本。
其實也就是將有圖形驗證碼的頁面截圖下來,在使用Python的PIL庫將驗證碼識別成可操作的對象。
代碼如下:

# -*- coding: UTF-8 -*_
from PIL import Image
from pytesseract import *
import PIL.ImageOps
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url) #url是你的網址

driver.get_screenshot_as_file(r'D:\PIC\PIC.png') #將該頁面截圖保存
path = r'D:\PIC\PIC.png'

#導入有驗證碼的圖片
im1 = Image.open(path)
#圖片的寬度和高度
img_size = im1.size
print("圖片寬度和高度分別是{}".format(img_size))
'''
裁剪:傳入一個元組作為參數
元組里的元素分別是:(距離圖片左邊界距離x, 距離圖片上邊界距離y,距離圖片左邊界距離+裁剪框寬度x+w,距離圖片上邊界距離+裁剪框高度y+h)
'''
#截取圖片中一塊有驗證碼的區域,這個位置需要自己去調整
x = 1311
y = 459
w = 115
h = 52
region = im1.crop((x, y, x + w, y + h))
region.save("D:/PIC/test1.png")#保存


def initTable(threshold=140):
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
return table
im = Image.open('G:/PIC/test1.png')
#圖片的處理過程
im = im.convert('L')
binaryImage = im.point(initTable(), '1')
im1 = binaryImage.convert('L')
im2 = PIL.ImageOps.invert(im1)
im3 = im2.convert('1')
im4 = im3.convert('L')
#將圖片中字符裁剪保留
box = (10,10,110,48)
region = im.crop(box)
#將圖片字符放大
out = region.resize((128,49))
code = pytesseract.image_to_string(out)#code就是圖形中的驗證碼
print(code)
#print (out.show())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM