python自動化實現登入獲取圖片驗證碼功能
阿新 • • 發佈:2020-01-09
主要記錄一下:圖片驗證碼
1.獲取登入介面的圖片
2.獲取驗證碼位置
3.在登入頁面擷取驗證碼儲存
4.呼叫百度api識別(目前準確率較高的識別圖片api)
本次登入的系統頁面,可以看到圖片驗證碼的位置
from selenium import webdriver import time from PIL import Image base_url = '***********' browser = webdriver.Chrome() browser.maximize_window() browser.implicitly_wait(10) browser.get(base_url) # (1)登入頁面截圖 browser.save_screenshot("D:/pic.png")#可以修改儲存地址 # (2)基操 browser.find_element_by_name("username").send_keys("gxx") browser.find_element_by_name("password").send_keys("123456") time.sleep(2) # (3)獲取圖片驗證碼座標 code_ele = browser.find_element_by_xpath("//*[@id='app']/div/div[1]/form/div[3]/div/div/div[2]/div/img") print("驗證碼的座標為:",code_element.location)#控制檯檢視{'x': 1086,'y': 368} print("驗證碼的大小為:",code_element.size)# 圖片大小{'height': 40,'width': 110} # (4)圖片4個點的座標位置 left = code_ele.location['x']#x點的座標 top = code_ele.location['y']#y點的座標 right = code_ele.size['width']+left#上面右邊點的座標 down = code_ele.size['height']+top#下面右邊點的座標 image = Image.open('D:/pic.png') # (4)將圖片驗證碼擷取 code_image = image.crop((left,top,right,height)) code_image.save('D:/pic1.png')#擷取的驗證碼圖片儲存為新的檔案
上面我們已經把圖片儲存到本地
這就是我們擷取的驗證碼
接下來要呼叫 百度ocr識別
連結: https://ai.baidu.com/docs#/
然後可以選擇通用文字識別或者 高精度版本,這個 看個人選擇,不過驗證碼識別還是選擇高精度 版本(也不一定識別的出來 大家還是佛吧,測試的時候讓開發把驗證碼去掉嘻嘻)
自己去申請一個百度雲賬號,然後開通文字識別服務…就醬
新建一個py檔案
#百度ocr提供了模板,我們直接複製就ok #下載通用文字識別的python sdk,一定要放在你寫的程式碼的資料夾下面 from aip import AipOcr from os import path def baiduOCR(picfile,outfile):#picfile:圖片檔名 outfile:輸出檔案 filename = path.basename(picfile)#圖片名稱 #百度提供 """ 你的 APPID AK SK """ APP_ID = ''#這是你產品服務的appid API_KEY = ''#這是你產品服務的appkey SECRET_KEY = ''#這是你產品服務的secretkey client = AipOcr(APP_ID,API_KEY,SECRET_KEY) i = open(picfile,'rb') img = i.read() print("正在識別圖片:\t" + filename) """ 呼叫通用文字識別(高精度版) """ message = client.basicAccurate(img) print("識別成功!") i.close() with open(outfile,'a+') as fo:#這邊是寫進.txt檔案 fo.writelines("*" * 60 + '\n')#搞點花裡胡哨的做區分 fo.writelines("識別圖片:\t" + filename + "\n" * 2) fo.writelines("文字內容:\n") # 輸出文字內容 for text in message.get('words_result'):#識別的內容 fo.writelines(text.get('words') + '\n') fo.writelines('\n' * 2) print("文字匯出成功!") print() if __name__ == '__main__' : outfile = 'D:/export1.txt'#儲存的檔案 baiduOCR('D:/pic1.png',outfile) print('圖片文字提取結束!文字輸出結果位於 %s 檔案中。' % outfile)
這樣就識別出來 了,這個能識別正確我也是驚訝了
畢竟之前好多次都 識別的不準確
好!這樣 驗證碼就識別出來 惹,然後把識別的內容輸進框子裡,點選登入就ok
總結
以上所述是小編給大家介紹的python自動化實現登入獲取圖片驗證碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!