在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多。通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过。之前在技术交流群里也跟朋友讨论过,有的人认为这不是在解决问题而是在回避问题。对于这种问题只能仁者见仁智者见智了,其实我是很不理解以这种"完美心态"进行自动化测试的童鞋,要将自动化测试深入到测试骨髓,每个步骤每个验证点都要进行自动化测试,不去考虑这个验证点在整个功能逻辑流程中所处的位置、所占的分量,不去考虑自动化测试投入的成本与效果,为了自动化而进行自动化。。。。好了有点扯远了,这篇主要记录的是如何使用ocr图片识别技术来识别验证码。但同时做个提醒,这个技术的效果没有很明显,可以说它只能识别简单的验证码,像平时遇到的那些识别起来是相当费力的。

先介绍下Tesseract-OCR

OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。

Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后经由Google进行改进,消除bug,优化,重新发布。我使用的版本为3.02.02

下载地址:http://download.csdn.net/download/whatday/7740469

一、 安装方法:

1.下载完成后点击安装,按照提醒一步步来即可

2.安装完成,查看安装完成的目录。

3.查看是否安装成功,打开dos,输入tesseract,出现下图的信息则证明安装成功

二、使用方法

1.在D盘根目录下有个验证码图片,我自己用画图写的一个,存为1.jpg

2.进入dos,进入D盘目录下,输入:tesseract 1.jpg result ,tesseract会识别1.jpg并生成一个result.txt文件存入识别结果

----------------------------------------------------------分割线-------------------------------------------------------------

那么如何用代码来进行识别呢?

  1. //ocr识别
  2. public static void ocrIdentificationCode() throws Exception
  3. {
  4. //调用ocr 生成text
  5. Runtime runtime = Runtime.getRuntime();
  6. runtime.exec("cmd.exe /C tesseract.exe D:\\1.jpg D:\\code -1");
  7.  
  8. }
  1. //读取目标文件
  2. public static void readCodeText(String filePath)
  3. {
  4. InputStreamReader isReader = null;
  5. String codeStr = null;
  6. try {
  7. String econding = "GBK";
  8. File file = new File(filePath);
  9. if(file.exists()&&file.isFile())//判断文件存在
  10. {
  11. isReader = new InputStreamReader(new FileInputStream(file),econding);
  12. BufferedReader bfReader = new BufferedReader(isReader);
  13. String lineText = null;
  14. while((lineText=bfReader.readLine())!= null)
  15. {
  16. System.out.println(lineText);
  17. System.out.println("11111111111111111111");
  18. }
  19. }else{
  20. System.out.println("文件不存在");
  21. }
  22. } catch (Exception e) {
  23. // TODO: handle exception
  24. e.printStackTrace();
  25. }finally{
  26. try {
  27. isReader.close();
  28. } catch (Exception e2) {
  29. // TODO: handle exception
  30. e2.printStackTrace();
  31. }
  32.  
  33. }
  34. }

调用两个方法

  

---------------------------------------总结-----------------------------------------------------

因为我自己试过使用tesseract-ocr引擎识别测试项目中的验证码,没有识别出来,反正像我们项目中遇到验证码我是找开发要个万能验证码,比较简单粗暴。

selenium使用笔记(二)——Tesseract OCR的更多相关文章

  1. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  2. selenium课程笔记

    selenium课程笔记第一天(2017-7-1) 一.配置火狐浏览器 运行:firefox.exe -p -no -remote selenium课程笔记第二天 用Eclipse+java+sele ...

  3. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  4. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  5. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  6. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  7. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  8. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  9. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  10. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. 5. web前端开发分享-css,js深化篇

    一. css练习网易专题: 1. http://news.163.com/ 新闻 跟腾讯的新闻版式大体没有大的变化,只是细节. 2. http://news.163.com/photo/#Curren ...

  2. shell脚本重新挂载出问题的卷

    #!/bin/bash#卷的全路径示例#pathexample =mount -t cetusfs 127.0.0.1:/cinderv/var/lib/cinder/volumes/0f6a20f4 ...

  3. Qt - 错误总结 - QObject::connect: Cannot queue arguments of type 'PVCI_CAN_OBJ' (Make sure 'PVCI_CAN_OBJ' is registered using qRegisterMetaType().)

    背景:一个线程通过signal-slot发送PVCI_CAN_OBJ类型的值到主线程中, 错误提示: QObject::connect: Cannot queue arguments of type ...

  4. Burp Suite 使用教程(上传突破利器)

    Burp Suite是一个免费的网站攻击工具. 它包括proxy.spider.intruder.repeater四项功能.该程序使用Java写成,需要 JRE 1.4 以上版本 下载该程序的源代码, ...

  5. MAC OS PHP

    Apache与PHP的配置 OSX自带了apache和php,但默认情况下没有开启,打开终端 sudo apachectl start 这时在浏览器中输入localhost应该就会出现apache标准 ...

  6. main 返回值

    int main() 在c中表示返回值时int:也可以不明确给出返回值,默认为int:()表示接受任何参数,main(void)表示不接受任何参数.main(),int main(),main(voi ...

  7. linux常用命令的介绍

    本文主要介绍Linux常用命令工具,比如用户创建,删除,文件管理,常见的网络命令等 如何创建账号: 1. 创建用户 useradd -m username -m 表示会在/home 路径下添加创建用户 ...

  8. windows内网渗透技巧

    1.(windows)无扫描器情况下内网存活主机探测: for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | find /i "t ...

  9. Linux学习记录

    ---恢复内容开始--- linux与unix的关系 linux是借鉴了unix设计思想,也称linux位类unix系统. Linux常用命令 1.命令基本格式 命令[选项][参数] 注意:个别命令不 ...

  10. C# winform 跨线程更改窗体控件的属性

    当winform程序中新开一个线程,是无法改变主线程中窗体控件的属性的,否则运行时会报错. 若想在其他线程中控制主线程中的窗体控件,则必须利用BeginInvoke方法. 例如:添加一个名为textb ...