Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 500|回复: 0

Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-6-7 12:01:53 | 显示全部楼层 |阅读模式

            在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位。

    我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片处理包即可,对于复杂的识别率要求非常高的,可以考虑百度等公司的OCR有偿服务(当然注册后好像每天可以免费试用上百次,普通测试够用了)。

     

    本人环境: win10,python3.x, pip( python3安装版会自带), pycharm, tesseract-ocr-setup-3.02.02.exe,

                      pytesser3 ,pytesseract ,selenium(chrome浏览器以及匹配版本的浏览器驱动geckodriver.exe),pillow 5.3,pillow-PIL 0.1 

     

    注意事项: 

    A.务必单独下载安装tesseract-ocr-setup-3.02.02.exe(会自动配置好PATH环境变量),安装好后可以运行DOS命令执行

    tesseract  G:\temp\captcha\image_code.png  g:\temp\abc_123  digits_numbers

    tesseract 要识别的图片  识别出来后字符的保存文件,默认为.txt ,  tesseract安装后Tesseract-OCR\tessdata\configs\路径有个digits文件,可以定义识别白名单,比如只识别数字等,使用后可以提高识别率,可以在原来文件直接改,我这里是复制后修改并且重新命名为digits_numbers,如果不使用白名单命令行可以不加digits_numbers

     

    B.在pytesser3目录下的__init__.py文件里,要修改好以下这行,主要是配置好tesseract.exe的安装路径,注意.exe不需要写

    #请务必修改下面的tesseract的name 换成你安装的ocr路径,谢谢!
    tesseract_exe_name = 'D:\\programs\\Tesseract-OCR\\tesseract' # Name of
    #tesseract_exe_name = 'c:\\Program Files (x86)\\Tesseract-OCR\\tesseract'

     

    以下是pycharm下的工程包和OCR核心源码,至于后续识别后如何登陆就是普通的接口测试或者selenium等UI自动化范畴了,此处省略一万字。如果连UI自动化都不精,不建议直接做这个,赶快回家看书去。

     

     

    from selenium import webdriver
    import pytesser3
    import os
    import sys, time
    from PIL import Image, ImageEnhance

    url = "http://登陆的URL"

    driver = webdriver.Chrome()

    time.sleep(2)

    driver.get(url)

    time.sleep(5)

    try:
    account = driver.find_element_by_id('_account')
    password = driver.find_element_by_id('_password')
    region = driver.find_element_by_id('_regionId')
    captcha = driver.find_element_by_id('_captcha')
    except:
    print("查找元素出现异常")

    # 网页截图 + 验证码截图
    try:
    driver.get_screenshot_as_file('G:\\temp\\page\\loginPage1.png') # 比较好理解
    im = Image.open('G:\\temp\\page\\loginPage1.png')
    box = (884, 684, 1024, 734) # 设置要裁剪的区域,这个坐标是验证码图片这个长方形的左上角坐标和右下角坐标,不懂可以问UI美工,用图形编辑工具很容易获得
    region = im.crop(box) # 此时,region是一个新的图像对象。
    region.save("G:\\temp\\captcha\\image_code.png")
    except:
    print("网页截图 + 验证码截图出现异常")

    driver.close()
    # --------------------图片增强+自动识别简单验证码-----------------------------
    # 防止图片还没保存好,就开始识别
    time.sleep(3)
    im = Image.open("G:\\temp\\captcha\\image_code.png")
    imgry = im.convert('L') # 图像加强,二值化
    sharpness = ImageEnhance.Contrast(imgry) # 对比度增强
    sharp_img = sharpness.enhance(2.0)
    sharp_img.save("G:\\temp\\captcha\\image_code.png")


    time.sleep(2)

    def image_file_to_string(file):
    cwd = os.getcwd()
    try:
    os.chdir("D:\\programs\\Tesseract-OCR")
    return pytesser3.image_file_to_string(file)
    finally:
    os.chdir(cwd)

    # code即为识别出的图片数字str类型
    code = image_file_to_string("G:\\temp\\captcha\\image_code.png")
    time.sleep(1)
    print(code)

    后续省略一万字,自己用次code去完成接下来的自动化登陆即可....
    有些复杂点的图片验证码识别率不高,是的,一开始我就说了,







    改进参考: 

    1. 真正应用的时候可以考虑把打开浏览器,截图等事情换个实现方式,使用内核浏览器操作,而非真正打开可见的浏览器,这样更快。

    2. OCR识别部分还需要用你要实现产品的验证码样本进行tesseract的进一步学习训练,或者换用商用OCR工具,识别率更高



    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 15:24 , Processed in 0.067066 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表