使用muggle_ocr處理selenium登入管理後臺驗證碼問題
阿新 • • 發佈:2021-01-21
技術標籤:selenium測試影象識別seleniumpython驗證碼muggle_ocr
在使用selenium登入管理後臺時,會遇到驗證碼問題,若驗證碼相對簡單,則可以使用影象識別開源庫muggle_ocr來識別驗證碼
如果影象有上圖那麼簡單,則可以使用如下程式碼,你只要修改其中的定位元素即可使用。解決思路如下:
1、muggle_ocr自帶有識別4-6位簡單驗證碼的模型,識別上述型別驗證碼的成功率為28%
2、雖然成功率很低,但我們可以通過不停地重新整理、識別、輸入驗證碼,直到驗證碼輸入成功
3、經過多次測試,最多隻需嘗試8次就能登入成功,效果算很不錯了。
4、如果你想提高識別率,則可以進入開源專案 https://github.com/kerlomz/captcha_trainer,自行訓練模型。
from selenium import webdriver import time import muggle_ocr import base64 #登入url login_url="xxxxxxxxxxxxxx" browser=webdriver.Chrome() browser.get(url=login_url) login_username="xxxxxx" browser.find_element_by_xpath('//*[@id="app"]/div/form/div[2]/div/div/input').send_keys(login_username) browser.find_element_by_xpath('//*[@id="app"]/div/form/div[3]/div/div/input').send_keys("xxxxx") time.sleep(1) def auto_fill_captcha(): #要求版本tensorflow==1.15.5,muggle-ocr==1.0.3 #通過url判斷當前是不是登入頁面,是就執行登入操作,不是就代表登入成功 print("開始登入.....") i=0 while browser.current_url==login_url: if i!=0: #重新整理驗證碼並清空驗證碼輸入框 browser.find_element_by_xpath('//*[@id="app"]/div/form/div[4]/div/img').click() browser.find_element_by_xpath("//div[@id='app']/div[@class='login-container']/form//input[@name='code']").clear() time.sleep(1) # 獲取、填寫驗證碼,點選登入按鈕 #獲取驗證碼,因為其是base64編碼方式的,需要先轉換為位元組型別,方便後面muggle_ocr使用 src = browser.find_element_by_xpath('//*[@id="app"]/div/form/div[4]/div/img').get_attribute("src") src = src.replace("data:image/jpg;base64,", "") missing_padding = 4 - len(src) % 4 if missing_padding: src += '=' * missing_padding image = base64.b64decode(src) print(image) # muggle_ocr中的ModelType.Captcha方法 可識別4-6位驗證碼 sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha) st = time.time() # 呼叫預測函式 text = sdk.predict(image_bytes=image) print(text, time.time() - st) #填入驗證碼 browser.find_element_by_xpath("//div[@id='app']/div[@class='login-container']/form//input[@name='code']").send_keys( text) #點選登入 browser.find_element_by_xpath("//div[@id='app']//form//span[.='登入']").click() time.sleep(3) i+=1 print("登入成功,總計用了 {} 次".format(i))
靈感來源文章連結,https://www.jianshu.com/p/1e6430b1c4d7
muggle_ocr開源專案https://github.com/kerlomz/captcha_trainer