前言: 在UI自動化測試和爬蟲測試中,驗證碼是個比較頭疼的問題,包括:圖片驗證碼,滑塊驗證碼,等一些常見的驗證碼場景。 識別驗證碼的python 庫有很多,用起來也並不簡單,這裡推薦一個簡單實用的識別驗證碼的庫 ddddocr (帶帶弟弟ocr)庫。 今天先用一個圖片驗證碼示例來演示下: 準備: 1 ...
前言:
在UI自動化測試和爬蟲測試中,驗證碼是個比較頭疼的問題,包括:圖片驗證碼,滑塊驗證碼,等一些常見的驗證碼場景。
識別驗證碼的python 庫有很多,用起來也並不簡單,這裡推薦一個簡單實用的識別驗證碼的庫 ddddocr (帶帶弟弟ocr)庫。
今天先用一個圖片驗證碼示例來演示下:
準備:
1.安裝庫ddddocr
2.安裝庫pillow
3.以一個帶驗證碼登錄的網站為示例:https://xqctk.jtys.sz.gov.cn/
開始編碼:
1代碼如下:
1 import time 2 from ddddocr import DdddOcr 3 from selenium import webdriver 4 from selenium.webdriver.common.by import By 5 from PIL import Image # 需安裝 pillow 6 7 path = 'https://xqctk.jtys.sz.gov.cn/' 8 9 10 def get_picture_code(locator): 11 pic_save_path = 'D://html.png' 12 cron_path = 'D://code.png' 13 browser.save_screenshot(pic_save_path) # 保存為圖片 14 location = browser.find_element(By.XPATH, locator) # 獲取需要識別的元素對象 15 size = location.size # 獲取需要識別的元素尺寸 16 position = (int(location.location['x']), int(location.location['y']), int(location.location['x'] + size['width']), int(location.location['y'] + size['height'])) 17 Image.open(pic_save_path).crop(box=position).save(cron_path) # crop進行裁剪 18 with open(cron_path, 'rb') as f: 19 img_bytes = f.read() 20 res = DdddOcr().classification(img_bytes) 21 return res 22 23 24 browser = webdriver.Chrome() # 打開瀏覽器 25 browser.maximize_window() # 瀏覽器最大化 26 browser.get(path) # 打開網頁 27 time.sleep(5) 28 pic_code = get_picture_code("//td[@id='incrementGetValidCodeImg']//img") 29 browser.find_element(By.XPATH, "//input[@id='incrementValidCode']").send_keys(pic_code) 30 time.sleep(5) 31 browser.quit()
運行結果: