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),并结合自动化工具实现全流程自动化~

相关推荐
今儿敲了吗1 小时前
python基础学习笔记第七章——文件操作
笔记·python·学习
不染尘.1 小时前
最小生成树算法
开发语言·数据结构·c++·算法·图论
Austin_YB1 小时前
VScode中配置Python环境
ide·vscode·python
qq_452396231 小时前
【Python × AI】LangChain 深度剖析:从组件解耦到 LCEL 的逻辑美学
人工智能·python·ai·langchain
ChineHe1 小时前
基础篇003_Python基础语法
开发语言·人工智能·python
oem1101 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
CSDN_Colinw2 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
沉沙丶2 小时前
关于matlab分析电流THD的一些探究和记录
开发语言·matlab·电机控制·foc·永磁同步电机·模型预测·预测控制
chase。2 小时前
Python包构建工具完全指南:python -m build 使用详解
开发语言·chrome·python