• 【转载】loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题


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

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

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

    按照云层提供的脚本,在system("c: est.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批处理

     1 Action()
     2 {
     3     int flen;        //定义一个整型变量保存获得文件的大小
     4     long filedes;    //保存文件句柄
     5     char file[256]="c:\test1.jpg";  //保存文件路径及文件名
     6     char result[10];   //存放验证码的
     7 
     8     web_set_max_html_param_len("2000000");//设置页面接收最大的字节数,该设置应大于下载文件的大小
     9 
    10          web_reg_save_param("pic",
    11                    "LB=",
    12                    "RB=",
    13                    "Ord=1",
    14                    "Search=Body",
    15                    LAST);
    16 
    17          web_url("randpiccloud","URL=https://passport.csdn.net/ajax/verifyhandler.ashx?r_d=63178",LAST);
    18 
    19          //http://biz.ftuan.com/CheckImg.aspx
    20          //http://passport.ftuan.com/SecurityCode.aspx?refresh=Wed Mar 6 11:21:21 UTC+0800 2013
    21          //http://comment8.mydrivers.com/radompage.aspx?0.{rnum}
    22          //https://passport.gaopeng.com/captcha?w=98&h=36&r=0.4655476964544505
    23          //https://passport.csdn.net/ajax/verifyhandler.ashx?r_d=63178
    24 
    25     
    26     flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //获得文件大小
    27 
    28     if(flen > 0)
    29     {
    30         if((filedes = fopen(file, "wb")) == NULL)
    31         {
    32             lr_output_message("oh cloud your Open File Failed!");
    33             return -1;
    34         }
    35         fwrite( lr_eval_string("{pic}"),flen,1,filedes );
    36 
    37         fclose( filedes );
    38     }
    39 
    40 
    41        system("c:\test.bat");            
    42        //调用C盘下的test.bat文件,改文件内容如下:
    43        /*
    44         c:
    45         cd C:Program FilesTesseract-OCR
    46         tesseract.exe c:	est1.jpg c:	est -l
    47        */
    48        //首先下载Tesseract工具并安装,在批处理文件中必须cd到安装目录,否则LR调用时会提示“tesseract.exe不是内部命令”
    49 
    50        if((filedes = fopen("c:\test.txt", "rt")) == NULL)
    51         {
    52             lr_output_message("oh,cloud your Open File Failed!");
    53             return -1;
    54         }
    55         fread( result,5,1,filedes);    //此处控制验证码的长度
    56         fclose( filedes );
    57 
    58         lr_output_message("result: %s",result);      
    59         lr_save_string(result,"txtCheck");        //传验证码到txtCheck参数
    60
    61         lr_output_message("txtCheck: %s",lr_eval_string("{txtCheck}"));         //lr_eval_string("{txtCheck}")用在下面的登录中
    62 
    63         return 0;
    64 }

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

  • 相关阅读:
    jmeter如何操作数据库
    jmeter压力测试
    cmd中用ping命令时,提示ping命令不是外部或内部命令问题
    scrapy post Request payload类型值
    scrapy-deltafetch实现增量爬取
    django虚拟环境搭建笔记
    python Image模块基本语法
    登录北京住房公积金,使用已注册过账号
    登录北京社保网站
    python通过pop3方式登录邮箱(qq,新浪,网易)
  • 原文地址:https://www.cnblogs.com/yezhaohui/p/3642774.html
Copyright © 2020-2023  润新知