Python-DdddOcr的简单使用
前言:
我们在做WEB端UI自动化时,会遇到图片验证码校验的登录方式。
我在之前的文章也做过介绍:
https://www.cnblogs.com/TSmagic/p/16082799.html (Pillow + pytesseract + tesseract-ocr 破解简单的图形验证码)
https://www.cnblogs.com/TSmagic/p/16117861.html(Python + 超级鹰 识别图形验证码)
今天来介绍一个开源的OCR通用验证码离线本地识别库DdddOcr
一、简介
都在这:https://github.com/sml2h3/ddddocr
二、使用
1、测试页面

2、代码
# coding: utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import tempfile, os import ddddocr URL = "${URL}" # 登录页 URL XPATH_USERNAME = "${username}" # 账号输入框 XPath XPATH_PASSWORD = "${password}" # 密码输入框 XPath XPATH_CODE = "${code}" # 验证码输入框 XPath ID_CAPTCHA_IMG = "${img}" # 验证码图片元素 ID CSS_LOGIN_BTN = "${login}" # 登录按钮 CSS 选择器 ACCOUNT = "${lit}" # 账号 PASSWORD = "${lit888}" # 密码 def login(): options = webdriver.ChromeOptions() # options.add_argument("--headless=new") # 如需无头模式可开启 driver = webdriver.Chrome(options=options) wait = WebDriverWait(driver, 10) try: driver.maximize_window() driver.get(URL) wait.until(EC.visibility_of_element_located((By.XPATH, XPATH_USERNAME))).send_keys(ACCOUNT) wait.until(EC.visibility_of_element_located((By.XPATH, XPATH_PASSWORD))).send_keys(PASSWORD) # 保存验证码到临时文件 with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp: img_path = tmp.name wait.until(EC.presence_of_element_located((By.ID, ID_CAPTCHA_IMG))).screenshot(img_path) ocr = ddddocr.DdddOcr(show_ad=False) with open(img_path, "rb") as f: img_bytes = f.read() result = ocr.classification(img_bytes) print("识别结果:", result) wait.until(EC.visibility_of_element_located((By.XPATH, XPATH_CODE))).send_keys(result) wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, CSS_LOGIN_BTN))).click() # 可在此添加登录成功标识的显式等待 # wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "...成功标识..."))) except TimeoutException as e: print(f"超时:{e}") finally: if os.path.exists(img_path): os.remove(img_path) # driver.quit() # 如需保留浏览器观察,可暂时注释 return driver # 如需后续操作可返回 driver if __name__ == "__main__": login()


浙公网安备 33010602011771号