学习了云大的验证码识别方法后我就开始研究如何实现自动登录的功能,经过研究发现LR在录制的时候是会存储结果文件的,默认存在脚本目录的result1中,其中Iteration1存储的是页面缓存文件,仔细检查了这个目录发现验证码文件就在这个目录中文件名为*ValidateCode.UNK , 于是便设想了一种识别验证码的方式:
1 lr 访问登录页面,在./result1/Iteration1/中生成*ValidateCode.UNK 文件即为验证码
2 lr 调用外部命令执行tesseract.exe识别验证码,将结果保存到txt文件中
3 lr 读取txt文件获取验证码,保存为参数
4 得到验证码参数后就可以实现登录功能了
理清了思路,开始录制脚本,然后进行修改,最终实现了登录操作,lr脚本如下(脚本中隐去了网址):
Action()
{
#define MAX_NAME_LEN 4
long filedes; //保存文件句柄
char result[4];
//登录页面
web_url("log_page",
"URL=http://www.XXXXXX.com/Member/LoginForm.do",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_think_time(5);
//使用python调用外部tesseract.exe文件识别验证码
system("E:\\SOFTWARE\\Python27\\python.exe ValidateCode.py");
if((filedes = fopen("ValidateCode.txt","rt")) == NULL)
{
lr_output_message("Open File Failed!");
return -1;
}
fread(result,4,1,filedes);
fclose(filedes);
lr_save_var( result, MAX_NAME_LEN, 0, "validate");
//提交登录信息
web_url("login",
"URL=http://www.XXXXXX.com/Cart/LoginResult.do?loginId=user_1234_5678&password=password&validateCode={validate}&mid=0&......",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://www.XXXXXX.com/Member/LoginForm.do",
"Snapshot=t4.inf",
"Mode=HTML",
LAST);
//查看是否登录成功
web_url("member_index",
"URL=http://www.XXXXXX.com/Member/index.jsp?mid=0",
"Mode=HTML",
LAST);
return 0;
}
ValidateCode.py文件内容如下:
#encoding=gbk
import sys
import os
cur = os.getcwd()
vcdir = os.path.join(cur,"result1\\Iteration1")
for f in os.listdir(vcdir) :
if f.endswith("ValidateCode.UNK"):
file = os.path.join(vcdir,f)
cmd = "tesseract.exe "+file+" ./ValidateCode -1";
os.system(cmd);
以上脚本实现了在有验证码情况下的自动登录,注意请将ValidateCode.py和tesseract.exe都拷贝到脚本目录!
记录下来供自己学习研究,欢迎各位拍砖!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25437692/viewspace-756613/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25437692/viewspace-756613/