1. 程式人生 > 程式設計 >python自動化實現登入獲取圖片驗證碼功能

python自動化實現登入獲取圖片驗證碼功能

主要記錄一下:圖片驗證碼

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自動化實現登入獲取圖片驗證碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!