在自动化测试或者安全渗透测试中,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 webdriverimport pytesser3import osimport sys, timefrom 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工具,识别率更高



转载于:https://www.cnblogs.com/sea520/p/10030317.html

Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考...相关推荐

  1. Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

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

  2. python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考...

    在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...

  3. 保险智能理赔-医疗票据OCR识别解决方案

    基于对健康险理赔行业的深刻洞察和理解,以领先的医疗AI数智化能力打通健康险理赔全流程,通过RPA人机协作实现对理赔材料的智能录入和初审工作,释放大量的专业录单和审核人力,减少企业运营成本. 面临痛点 ...

  4. OCR识别通过某瓣人机验证

    本篇文章将带你使用ocr识别通过人机验证码 豆瓣很骚,莫名其妙就总会出来人机验证,用了代理也过不去,感觉是通过cookies识别你是否为爬虫,一识别就出404弹个人机验证,为了防止爆人机,也想了很多方 ...

  5. 财务报表OCR识别平台案例之安徽征信

    近日,译图智讯中标安徽征信财务报表OCR识别项目,携OCR识别技术助力安徽征信财务报表由人工录入转为自动录入,项目完成后可节约管理成本,有效规避风险,提升公司核心价值和竞争优势. 安徽省征信股份有限公 ...

  6. 文通科技:盘点OCR识别大家族

    随着科技的发展,人类被越来越多的智能化设备惯得越来越"懒",特别是到了人工智能时代的到来,智能化.自动化成为主导趋势,越来越多的基础的人工已经逐渐被替代.作为人工智能分支的OCR识 ...

  7. 直销银行小神器--银行卡OCR识别

    一.银行卡OCR识别应用背景 直销银行是互联网时代应运而生的一种新型银行运作模式,是互联网金融科技环境下的一种新型金融产物.这一经营模式下,银行没有营业网点,不发放实体银行卡,客户主要通过电脑.电子邮 ...

  8. 保单OCR识别技术介绍

    对于保险.金融.汽车等相关机构,纸质(寿险.车险等)保单的归档管理及信息提取向来都是业务环节的重要组成部分,往往需要将非结构化的保单信息录入到系统中,用于电子档备份和信息化管理. 在保险行业,各类纸质 ...

  9. 自动化测试--20验证码识别

    1.验证码的目的:就是为阻止通过代码自动登录 2.验证码的解决方法: 1)通过第三方工具识别验证码 2)通过第三方网站识别验证码-人工识别 3)通过万能验证码的方式-为了做自动化测试 4)可以屏蔽掉验 ...

最新文章

  1. 【转载】解决Apache2+PHP上传文件大小限制的问题
  2. pxe安装linux dhcp失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  3. php curl的数据后台如何接收,PHP curl以模拟put请求,后台无法接受到数据是怎么回事?...
  4. Java路径问题最终解决方案
  5. Java 蓝桥杯 阶乘计算
  6. flash计算机代码怎么写,应用程序操作NorFlash示例代码分享(norflash接口使用方法)...
  7. DSP实验报告—实验2  编写一个以C语言为基础的DSP程序
  8. Excel插件POI-ET扩展(NiceXSSFWorkbook)说明
  9. 国内外五款免费的协作类管理软件推荐
  10. HTML中Table去掉两边的边框
  11. 什么是SEO,为什么要做SEO?
  12. ZT 内地20年经典电视剧大全
  13. 黄仁勋:GPU,打折!
  14. 硬件开发者之路之运放共模电压的解释
  15. 【扫盲】史上最全的互联网专业词语汇总!
  16. Spline算法实现
  17. linux c socket编程学习(1)(一些基本概念及基本的函数使用)
  18. Nature分享:如何写好高被引综述论文?
  19. nmap工具使用详解
  20. Spring 事务传播机制 实例讲解

热门文章

  1. const constexpr C++ 解释
  2. 在android studio中创建Hello-JNI工程
  3. SQL优化技巧--远程连接对象引起的CTE性能问题
  4. js原生代码编写一个鼠标在页面移动坐标的检测功能,兼容各大浏览器
  5. jquery 插件闭包
  6. django-oscar-paypal出现UnicodeEncodeError: 'latin-1' codec can't encode characters in position XXXX
  7. 三星note4 9100自动关机问题以及空间不够的问题研究。。。。
  8. LibSVM 使用错误解决
  9. ext不能选中复制属性_复制拷贝文件不怕再出错,一个超级好用的小工具,支持多线程工作...
  10. 深度学习(三十五)——Style Transfer(2), YOLOv3, Tiny-YOLO, One-stage vs. Two-stage