突破验证壁垒:SeleniumBase+Tesseract OCR全自动识别方案

突破验证壁垒:SeleniumBase+Tesseract OCR全自动识别方案

【免费下载链接】SeleniumBase seleniumbase/SeleniumBase: 一个 Python 库,用于自动化 Web 应用程序测试。特点是提供了一个简单易用的 API,可以用于模拟用户操作,包括点击、输入和滚动等。 【免费下载链接】SeleniumBase 项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase

你是否还在为自动化测试中的验证而头疼?手动输入效率低下,第三方服务成本高昂?本文将带你实现从0到1的验证自动化识别方案,基于SeleniumBase框架集成Tesseract OCR引擎,彻底解决Web自动化中的验证痛点。读完本文你将掌握:

  • Tesseract OCR与SeleniumBase的无缝集成
  • 验证图片预处理关键技术
  • 抗干扰识别优化策略
  • 真实场景下的验证识别案例

技术选型与环境准备

核心组件介绍

SeleniumBase作为顶级Web自动化框架,提供了undetected-chromedriver模块绕过网站反爬机制,而Tesseract OCR则是Google开源的光学字符识别引擎。两者结合可构建完整的验证识别闭环:

mermaid

环境安装命令

# 安装SeleniumBase(包含undetected-chromedriver)
pip install seleniumbase

# 安装Tesseract OCR引擎
# Ubuntu/Debian
sudo apt install tesseract-ocr

# macOS
brew install tesseract

# Windows
choco install tesseract

详细安装指南参见SeleniumBase官方文档Tesseract安装说明

核心实现原理

验证识别流程

  1. 元素定位:使用SeleniumBase的find_element()方法定位验证图片元素
  2. 屏幕截图:通过save_screenshot()获取完整页面,再根据元素坐标裁剪出验证区域
  3. 图像预处理:应用灰度转换、降噪、二值化等操作增强识别率
  4. OCR识别:调用Tesseract识别处理后的图像
  5. 结果校验:将识别结果填入表单并验证是否成功

关键代码实现

创建文件examples/captcha_solver.py,实现基础验证识别类:

from seleniumbase import SB
import pytesseract
from PIL import Image, ImageEnhance, ImageFilter
import numpy as np

class CaptchaSolver:
    def __init__(self, sb):
        self.sb = sb  # SeleniumBase实例
        self.tesseract_path = "/usr/bin/tesseract"  # 根据系统调整路径
        
    def preprocess_image(self, img_path):
        """图像预处理:灰度化→降噪→二值化"""
        img = Image.open(img_path)
        # 转为灰度图
        img = img.convert('L')
        # 增强对比度
        enhancer = ImageEnhance.Contrast(img)
        img = enhancer.enhance(2.0)
        # 中值滤波降噪
        img = img.filter(ImageFilter.MedianFilter(size=3))
        # 二值化处理
        threshold = 150
        img = img.point(lambda p: p > threshold and 255)
        return img
    
    def solve(self, element_selector):
        """主识别函数"""
        # 定位验证元素
        captcha_element = self.sb.find_element(element_selector)
        
        # 截图并裁剪验证区域
        self.sb.save_screenshot("full_page.png")
        location = captcha_element.location
        size = captcha_element.size
        x1, y1 = int(location['x']), int(location['y'])
        x2, y2 = x1 + int(size['width']), y1 + int(size['height'])
        
        # 裁剪并预处理
        full_img = Image.open("full_page.png")
        captcha_img = full_img.crop((x1, y1, x2, y2))
        captcha_img.save("captcha_raw.png")
        
        # 预处理图像
        processed_img = self.preprocess_image("captcha_raw.png")
        processed_img.save("captcha_processed.png")
        
        # Tesseract OCR识别
        result = pytesseract.image_to_string(
            processed_img,
            config='--psm 8 -c tessedit_char_whitelist=ABCDEFGHJKLMNPQRSTUVWXYZ23456789'
        )
        return result.strip()

实战案例:Bing验证识别

完整代码实现

以Bing搜索的验证为例,使用上述CaptchaSolver类实现自动识别:

from seleniumbase import SB
from captcha_solver import CaptchaSolver  # 导入上文实现的类

with SB(uc=True, test=True, incognito=True) as sb:
    # 访问带验证的页面
    sb.open("https://www.bing.com/turing/captcha/challenge")
    
    # 初始化验证求解器
    solver = CaptchaSolver(sb)
    
    # 识别并输入验证
    captcha_code = solver.solve("img#captchaImage")
    sb.type("#captchaInput", captcha_code)
    
    # 提交表单
    sb.click("#submitButton")
    
    # 验证是否成功
    if sb.is_element_present("#successMessage"):
        sb.post_message("验证识别成功!", duration=3)
    else:
        sb.post_message(f"识别失败,尝试字符: {captcha_code}", duration=3)

实际项目中建议添加重试机制,参考examples/raw_bing_captcha.py的实现

识别效果优化

针对复杂背景的验证,需要添加高级预处理:

# 高级预处理函数(添加到CaptchaSolver类)
def advanced_preprocess(self, img_path):
    img = Image.open(img_path).convert('L')
    
    # 自适应阈值二值化
    arr = np.array(img)
    arr = np.where(arr > np.mean(arr) * 1.2, 255, 0).astype(np.uint8)
    
    # 形态学操作去除噪点
    from scipy.ndimage import binary_opening
    arr = binary_opening(arr, structure=np.ones((2,2))).astype(np.uint8)
    
    return Image.fromarray(arr)

常见问题与解决方案

识别率低下问题

问题原因解决方案参考代码
字符粘连腐蚀/膨胀操作img.filter(ImageFilter.MinFilter(3))
背景干扰添加边框ImageOps.expand(img, border=10, fill='white')
倾斜字符透视变换使用OpenCV的warpAffine

反爬机制应对

网站可能通过以下方式阻止自动化识别:

  1. 动态验证:使用SeleniumBase的CDP模式拦截网络请求
  2. 行为检测:添加随机延迟和人类行为模拟
# 模拟人类输入速度
sb.type("#captchaInput", captcha_code, delay=0.2)

# 随机鼠标移动
sb.move_to_element_randomly("#submitButton")

总结与扩展

本文实现的方案已成功应用于examples/raw_recaptcha.py等测试场景。对于更复杂的验证(如reCAPTCHA v2),可结合:

  1. 深度学习模型:训练CNN模型识别复杂验证
  2. 第三方服务:集成打码平台API作为备用方案
  3. 音频识别:调用Tesseract的音频识别功能处理语音验证

建议定期更新SeleniumBase和Tesseract版本以获取最新特性支持。最后附上项目地址:GitHub_Trending/se/SeleniumBase

点赞+收藏本文,下期将带来《突破reCAPTCHA v3:行为分析绕过技术》

【免费下载链接】SeleniumBase seleniumbase/SeleniumBase: 一个 Python 库,用于自动化 Web 应用程序测试。特点是提供了一个简单易用的 API,可以用于模拟用户操作,包括点击、输入和滚动等。 【免费下载链接】SeleniumBase 项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值