俗话说前人栽树,后人乘凉,此话一点不假,结合云层的一遍文章:使用OCR来帮助LR实现认证码识别,知道还有一个Tesseract-OCR可以用来识别图片上的文字(验证码)。

在code.google上下载了tesseract-ocr-setup-3.02.02.exe,即windows版本,下载安装后安装路径自动加入到环境变量中,在cmd中可以手动测试一下:

格式如下:tesseract.exe c:\test1.jpg c:\test -l //test1.jpg 是我提前保存在C盘中的验证码图片,后面的test自动把test1.jpg中的验证码保存到test.txt中,后面-l是写入到test.txt文件中的。

按照云层提供的脚本,在system("c:\test.bat");无法运行,批处理脚本一闪就没有啦。修改了system("c:\\test.bat");,并修改了批处理文件,加入了pause,提示错误。如下图:

  

  

loadrunner工具不识别tesseract.exe命令,但是手动在任何目录中都是可以的,难道通过LR打开的终端窗口对windows中的path环境变量不识别??这个稍后严重。。

看样子只能修改这个批处理文件啦,把路径指定到tesseract的安装目录中去才可以。

  

然后运行成功,在自动生成的test.txt中可以看到获取的验证码,也可以再LR的输出中看到验证码:t4zbyh

   

试了几个验证码,大多没有问题,

其中下面的不能被识别(2013年3月8日补充:并不是所有HTTPS的不能被识别,中信银行信用卡中心的验证码【纯数字的】就可以被识别https://creditcard.ecitic.com/citiccard/cppnew/jsp/valicode.jsp?time=1362724476515,一些验证码不被识别的原因还待摸索,为什么https纯数字的验证码就可以,难道其他的验证码是英文字符或者是加粗或者是图片太大的原因吗??)前面带有HTTPS的:https://passport.csdn.net/ajax/verifyhandler.ashx?r_d=63178

  

下面是loadrunner脚本:现在C盘中建立test.bat批处理

 Action()
{
int flen; //定义一个整型变量保存获得文件的大小
long filedes; //保存文件句柄
char file[]="c:\\test1.jpg"; //保存文件路径及文件名
char result[]; //存放验证码的 web_set_max_html_param_len("");//设置页面接收最大的字节数,该设置应大于下载文件的大小 web_reg_save_param("pic",
"LB=",
"RB=",
"Ord=1",
"Search=Body",
LAST); web_url("randpiccloud","URL=https://passport.csdn.net/ajax/verifyhandler.ashx?r_d=63178",LAST); //http://biz.ftuan.com/CheckImg.aspx
//http://passport.ftuan.com/SecurityCode.aspx?refresh=Wed Mar 6 11:21:21 UTC+0800 2013
//http://comment8.mydrivers.com/radompage.aspx?0.{rnum}
//https://passport.gaopeng.com/captcha?w=98&h=36&r=0.4655476964544505
//https://passport.csdn.net/ajax/verifyhandler.ashx?r_d=63178 flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //获得文件大小 if(flen > )
{
if((filedes = fopen(file, "wb")) == NULL)
{
lr_output_message("oh cloud your Open File Failed!");
return -;
}
fwrite( lr_eval_string("{pic}"),flen,,filedes ); fclose( filedes );
} system("c:\\test.bat");
//调用C盘下的test.bat文件,改文件内容如下:
/*
c:
cd C:\Program Files\Tesseract-OCR
tesseract.exe c:\test1.jpg c:\test -l
*/
//首先下载Tesseract工具并安装,在批处理文件中必须cd到安装目录,否则LR调用时会提示“tesseract.exe不是内部命令” if((filedes = fopen("c:\\test.txt", "rt")) == NULL)
{
lr_output_message("oh,cloud your Open File Failed!");
return -;
}
fread( result,,,filedes); //此处控制验证码的长度
fclose( filedes ); lr_output_message("result: %s",result);      
lr_save_string(result,"txtCheck"); //传验证码到txtCheck参数 lr_output_message("txtCheck: %s",lr_eval_string("{txtCheck}")); //lr_eval_string("{txtCheck}")用在下面的登录中 return ;
}

  后续关注的问题是Tesseract-OCR识别图片的精确度,排除https协议的影响,目前识别验证码的精确度为70%左右,如果用在性能测试项目或者自动化测试项目中,将会大大降低工作效率的,并且system()调用和处理批处理也需要消耗时间。在正式测试时,尽量不要使用该工具,最好的办法是让研发开一个万能验证码或者去掉验证码功能。

【转载】loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题的更多相关文章

  1. 使用Tesseract OCR识别验证码

    1.下载Tessrac OCR,默认安装 2.把验证码code.jpg图片放在D盘 3.打开cmd,进入D盘,输入:tesseract  code.jpg result 4.进入D盘,生成了resul ...

  2. loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题

    俗话说前人栽树,后人乘凉,此话一点不假,结合云层的一遍文章:http://bbs.51testing.com/thread-533920-1-1.html,知道还有一个Tesseract-OCR可以用 ...

  3. 吴裕雄--天生自然python学习笔记:python 用 Tesseract 识别验证码

    用 Selenium 包实现网页自动化操作的案例中,发现很多网页都因 需输入图形验证码而导致实验无法进行 . 解决的办法就是对验证码进行识别 . 识 别的方法之 一 是通过图形处理包将验证码的大部分背 ...

  4. 分享一个爬取HUST(哈理工)学生成绩的Python程序(OCR自动识别验证码)

    Python版本:3.5.2 日期:2018/1/21 __Author__ = "Lance#" # -*- coding = utf-8 -*- from urllib imp ...

  5. 基于Tesseract的OCR识别小程序

    一.背景 先说下开发背景,今年有次搬家找房子(2020了应该叫去年了),发现每天都要对着各种租房广告打很多电话.(当然网上也找了实地也找),每次基本都是对着墙面看电话号码然后拨打,次数一多就感觉非常麻 ...

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

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

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

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

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

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

  9. 基于Tesseract组件的OCR识别

    基于Tesseract组件的OCR识别 背景以及介绍 欲研究C#端如何进行图像的基本OCR识别,找到一款开源的OCR识别组件.该组件当前已经已经升级到了4.0版本.和传统的版本(3.x)比,4.0时代 ...

随机推荐

  1. 使用HtmlAgilityPack抓取网页数据

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. 下面列出了最有用的路径表达式: nodename:选取此节点的所有 ...

  2. 总结sqlserver数据库性能优化相关的注意事项

    一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...

  3. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary> /// 工厂方 ...

  4. vim 多窗口

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一 ...

  5. View、ViewGroup (转)

    Android原理揭秘系列之View.ViewGroup (转) Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGrou ...

  6. 多功能扫描打印读卡一体手持POS终端

    以往便利店或者超市,前台那个笨重的POS机和站在POS机后的收银员.传统的零售店中,笨重的POS机随处可见. 一个顾客要结账,就需要通过POS机.小票打印机.刷卡器等的配合才能实现.店面需要盘点,整理 ...

  7. 并查集+拓扑排序 赛码 1009 Exploration

    题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...

  8. C# 中的可变参数方法(VarArgs)

    首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.Call ...

  9. ural 1431. Diplomas

    1431. Diplomas Time limit: 1.0 secondMemory limit: 64 MB It might be interesting for you to learn th ...

  10. POJ 1064 (二分)

    题目链接: http://poj.org/problem?id=1064 题目大意:一堆棍子可以截取,问要求最后给出K根等长棍子,求每根棍子的最大长度.保留2位小数.如果小于0.01,则输出0.00 ...