selenium使用笔记(二)——Tesseract OCR

时间:2023-03-08 17:58:43
selenium使用笔记(二)——Tesseract OCR

在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多。通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过。之前在技术交流群里也跟朋友讨论过,有的人认为这不是在解决问题而是在回避问题。对于这种问题只能仁者见仁智者见智了,其实我是很不理解以这种"完美心态"进行自动化测试的童鞋,要将自动化测试深入到测试骨髓,每个步骤每个验证点都要进行自动化测试,不去考虑这个验证点在整个功能逻辑流程中所处的位置、所占的分量,不去考虑自动化测试投入的成本与效果,为了自动化而进行自动化。。。。好了有点扯远了,这篇主要记录的是如何使用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.安装完成,查看安装完成的目录。

selenium使用笔记(二)——Tesseract OCR

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

selenium使用笔记(二)——Tesseract OCR

二、使用方法

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

selenium使用笔记(二)——Tesseract OCR

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

selenium使用笔记(二)——Tesseract OCR

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

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

//ocr识别
public static void ocrIdentificationCode() throws Exception
{
//调用ocr 生成text
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd.exe /C tesseract.exe D:\\1.jpg D:\\code -1"); }
//读取目标文件
public static void readCodeText(String filePath)
{
InputStreamReader isReader = null;
String codeStr = null;
try {
String econding = "GBK";
File file = new File(filePath);
if(file.exists()&&file.isFile())//判断文件存在
{
isReader = new InputStreamReader(new FileInputStream(file),econding);
BufferedReader bfReader = new BufferedReader(isReader);
String lineText = null;
while((lineText=bfReader.readLine())!= null)
{
System.out.println(lineText);
System.out.println("11111111111111111111");
}
}else{
System.out.println("文件不存在");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
isReader.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
} }
}

调用两个方法

  selenium使用笔记(二)——Tesseract OCR

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

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