使用Python Selenium自动识别填写图片验证码的实现方案咨询
Selenium实现图片数字验证码自动识别的解决方案
可用第三方库说明
你已经安装的captcha-solver是可直接使用的识别库,除此之外更适合新手使用的轻量识别库还有ddddocr,无需额外安装本地依赖,对简单数字验证码识别准确率可达95%以上。
核心实现步骤
- 定位页面中的验证码图片元素和验证码输入框元素
- 截取验证码元素的图片内容(或直接获取图片链接下载二进制内容)
- 调用识别库解析图片中的数字
- 将识别结果通过
send_keys方法填入输入框即可
captcha-solver 具体调用方法
该库支持多种识别后端,针对简单数字验证码推荐搭配Tesseract后端使用,使用前需保证本地已安装Tesseract程序。
示例调用代码如下:
from selenium import webdriver from captcha_solver import CaptchaSolver import time from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 初始化浏览器 browser = webdriver.Chrome("/Users/yilmaz/Desktop/chromedriver") browser.get("https://medeczane.sgk.gov.tr/eczane/login.jsp") time.sleep(2) # 1. 定位验证码元素 captcha_img = browser.find_element(By.XPATH, '//img[@alt="Güvenlik Anahtarı"]') # 2. 截取验证码元素图片保存到本地 captcha_img.screenshot('captcha.png') # 3. 初始化识别器,使用Tesseract后端 solver = CaptchaSolver('tesseract') # 识别图片内容 raw_data = open('captcha.png', 'rb').read() captcha_code = solver.solve_captcha(raw_data) # 4. 填入验证码 captcha_input = browser.find_element(By.NAME, 'guvenlikAnahtari') captcha_input.send_keys(captcha_code) # 后续可继续填写用户名密码提交表单
更易用的替代方案:ddddocr
如果不想安装额外的Tesseract依赖,推荐使用ddddocr库,安装命令pip install ddddocr,使用示例如下:
from selenium import webdriver import ddddocr import time from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys browser = webdriver.Chrome("/Users/yilmaz/Desktop/chromedriver") browser.get("https://medeczane.sgk.gov.tr/eczane/login.jsp") time.sleep(2) # 定位并截取验证码 captcha_img = browser.find_element(By.XPATH, '//img[@alt="Güvenlik Anahtarı"]') captcha_bytes = captcha_img.screenshot_as_png # 初始化识别器 ocr = ddddocr.DdddOcr(show_ad=False) captcha_code = ocr.classification(captcha_bytes) # 填入验证码 browser.find_element(By.NAME, 'guvenlikAnahtari').send_keys(captcha_code)
注意事项
- 如果验证码识别失败,可以调用
captcha_img.click()刷新验证码后重新识别 - 若页面加载速度慢,可适当增加
time.sleep等待元素加载完成 - 针对带复杂干扰线、扭曲的验证码,可搭配付费验证码识别接口使用,识别准确率更高
内容的提问来源于stack exchange,提问作者Yılmaz Kahya
相关产品推荐
相关产品推荐

