做web自動化中最頭疼的往往是驗證碼功能了,現在基本上每個網站的登錄功能,都有驗證碼,要么輸入數字,要么是滑動,再不然就是一些圖片翻轉,點擊圖片類型。今天安靜介紹個如何識別簡單的驗證碼。
識別驗證碼
安靜這里主要是采用調用了別人的OCR識別接口,然后通過selenium請求登錄頁面將驗證碼圖片保存在本地或者直接傳入識別接口中進行識別。安靜先放一張動圖看下效果內容
這里采用了尖叫數據的,網上有很多都是日常免費的一些,大家可以自行申請,然后找到下圖的api接口信息,根據接口請求內容進行配置。
整體思路:
1、打開瀏覽器內容,保存圖片信息
2、將圖片轉換成接口需要的base64位編碼。
3、然后識別出來驗證碼信息返回出來
4、通過輸入方式進行輸入到驗證碼輸入框中。
具體代碼實現
import requests from selenium import webdriver import base64 import time driver = webdriver.Chrome() # 打開登錄頁面 driver.get('http://v3pro.houjiemeishi.com/PC/pages/login/login.html') # 獲取驗證碼圖片地址 img_url = driver.find_element_by_class_name('codeImg').get_attribute('src') # 通過請求圖片地址獲取圖片的base64編碼 img_r = requests.get(url=img_url) base64_data = base64.b64encode(img_r.content).decode() bodys = { "v_pic": base64_data, "pri_id": 'ne', "number": 4 }
# 這個參數可以通過建交數據進行自行申請 headers = { 'appcode': "xxxxxxx", "appKey": "xxxxxx", "appSecret": "xxxxxxx" } # 請求驗證碼接口信息,返回驗證碼數字 url = 'http://apigateway.jianjiaoshuju.com/api/v_1/yzmCustomized.html' r = requests.post(url, headers=headers, data=bodys) tt = r.json()['v_code'] time.sleep(1) # 驗證碼輸入框輸入驗證碼信息 driver.find_element_by_class_name('ipt2').send_keys(tt)
通過上面調用開源識別驗證碼的OCR接口就可以輕松的解決這種簡單的驗證碼識別的問題,當然這種方法也不一定可能,因為有的驗證碼會比較模糊,或者有其他的橫線進行遮擋,識別出來就比較麻煩,那這個時候就需要其他的方法,比如調用python的CV2的圖進行對其圖片進行一些修改,比如把背景虛化,或者背景亮度調暗,感興趣的小伙伴們可以自己去實踐下。后續安靜也慢慢的給大家補充。