python识别验证码

要实现验证码自动识别与填写,需分步骤结合图像识别(OCR)和自动化操作技术。以下是详细方案(以 Web 页面为例,App 逻辑类似,需替换自动化工具):

一、核心思路

  1. 获取验证码图片:从页面中定位并截取验证码区域。

  2. OCR 识别验证码:通过图像识别技术提取验证码字符。

  3. 自动填写验证码:将识别结果输入到验证码输入框,完成后续操作(如点击"登录/注册")。

二、步骤拆解与代码实现

🔹 步骤 1:获取验证码图片(Web 场景)

假设目标是 Web 页面,需用Selenium定位验证码图片并下载:

python 复制代码
from selenium import webdriver
import requests

# 1. 启动浏览器并打开目标页面
driver = webdriver.Chrome()  # 需提前安装 ChromeDriver
driver.get("https://目标网站.com/login")  # 替换为实际 URL

# 2. 定位验证码图片元素(需根据页面结构修改 XPath/CSS 选择器)
captcha_img = driver.find_element_by_xpath("//img[contains(@src, 'captcha')]")  
img_url = captcha_img.get_attribute("src")  # 获取图片的网络地址

# 3. 下载验证码图片到本地
response = requests.get(img_url)
with open("captcha.png", "wb") as f:
    f.write(response.content)

driver.quit()  # 关闭浏览器(后续识别完再启动也可)
  

🔹 步骤 2:OCR 识别验证码

需根据验证码复杂度选择技术方案:

方案 A:简单验证码(无干扰、清晰)→ Tesseract-OCR

Tesseract 是开源 OCR 引擎,适合简单场景。需安装 pytesseract 和 Tesseract 引擎(https://github.com/tesseract-ocr/tesseract)。

python 复制代码
import cv2
import pytesseract

# 1. 读取验证码图片
img = cv2.imread("captcha.png")

# 2. 图像预处理(提升识别率,可选步骤)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)       # 转灰度
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]  # 二值化
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 形态学去噪
clean = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)  

# 3. 识别文字(配置参数优化:单字符模式、引擎模式)
text = pytesseract.image_to_string(clean, lang="eng", config="--psm 8 --oem 3")  
captcha = text.strip()  # 清理空格/换行
print(f"识别结果:{captcha}")

方案 B:复杂验证码(含干扰线、扭曲、彩色)→ 第三方 OCR API

若 Tesseract 识别率低,推荐用百度/腾讯/阿里云文字识别 API(需注册获取密钥,适合付费或高精度需求)。以百度 AI 开放平台为例:

  1. 注册百度 AI,创建应用,获取 API Key 和 Secret Key。

  2. 调用通用文字识别 API(示例代码):

python 复制代码
import requests
import base64

def get_baidu_access_token():
    """获取百度 OCR 的 Access Token"""
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {
        "grant_type": "client_credentials",
        "client_id": "你的API_Key",
        "client_secret": "你的Secret_Key"
    }
    res = requests.get(url, params=params)
    return res.json().get("access_token")

def ocr_captcha_with_baidu(image_path):
    """调用百度 OCR 识别验证码"""
    access_token = get_baidu_access_token()
    with open(image_path, "rb") as f:
        img_base64 = base64.b64encode(f.read()).decode()
    
    url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={access_token}"
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    data = {"image": img_base64}
    res = requests.post(url, headers=headers, data=data)
    if "words_result" in res.json():
        return "".join([item["words"] for item in res.json()["words_result"]])
    return ""

captcha = ocr_captcha_with_baidu("captcha.png")
print(f"百度 OCR 识别结果:{captcha}")
  

🔹 步骤 3:自动填写验证码

识别出验证码后,用自动化工具(如 Selenium)填充到输入框:

python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://目标网站.com/login")  # 重新打开页面(或复用之前会话)

# 定位验证码输入框并填写
captcha_input = driver.find_element_by_xpath("//input[@placeholder='请输入手机验证码']")
captcha_input.send_keys(captcha)  # 填入识别结果

# (可选)后续操作:点击"登录/注册"
login_btn = driver.find_element_by_xpath("//button[text()='登录/注册']")
login_btn.click()

driver.quit()

三、进阶注意事项

  1. 验证码时效性:多数验证码有过期时间(如 60 秒),需优化流程速度(减少截图、网络请求耗时)。

  2. 反爬对抗:部分网站会检测 Selenium 等自动化工具(如识别 WebDriver 特征),需做反反爬:

• 隐藏 WebDriver 标识:options.add_argument("--disable-blink-features=AutomationControlled")

• 模拟人工操作延迟:time.sleep(1) 模拟思考时间。

  1. 复杂验证码处理:若为滑动、点选、行为验证码,需用专用自动化工具(如 Selenium 模拟拖拽、Appium 模拟手势)或打码平台(如超级鹰、若快)。

四、总结流程

定位截图验证码 → OCR 识别字符 → 自动化填写 → 完成登录/注册

根据验证码复杂度和使用场景,灵活选择 OCR 方案(开源 Tesseract 或付费 API),并结合自动化工具实现全流程自动化~

相关推荐
段一凡-华北理工大学11 分钟前
【高炉炼铁领域炉温监测、预警、调控智能体设计与应用】~系列文章08:多模态数据融合:让数据更聪明
人工智能·python·高炉炼铁·ai赋能·工业智能体·高炉炉温
万粉变现经纪人15 分钟前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒26 分钟前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼31 分钟前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
callJJ1 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
小郑加油2 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦2 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
.柒宇.2 小时前
AI掘金头条项目-K8s部署实战教程
python·云原生·容器·kubernetes·fastapi
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
观北海2 小时前
从 Sim2Sim 到 Sim2Real:以 ONNX 为核心的机器人策略实机落地全指南
python·机器人