花了两天时间才完整的完成识别验证码的登录操作,在网上看到很多关于验证码识别的方法,但是我用的qtp版本比较高级,所以还是要自己花心思研究。po上我的识别验证码的详细历程:
一、读取浏览器中的图片验证码
1.打开浏览器登录界面
2.启动qtp,不勾选web
3.录制验证码。开始录制:在录制的小条上选择insert ->text area output value. 截图验证码图片的框。
然后选择modify,output types设置为environment,name 可以改写为“getchar”。停止录制
得到的代码为:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")
4.在录制完后的代码上加一行:
msgbox environment.Value ("getchar")
5.在qtp上点击run
这样它就会弹出验证码的消息框

二、识别word中的数字。在qtp中回放录制的验证码,将验证码输出来:
在word中选中一段图片,内容为数字,获取到图片里的数字。然后将获取到数字在word中输出来:
1,打开qtp,不选择web。录制时利用text area output value在word中选中一段图片,内容为数字,获取到图片里的数字,保存为环境变量getchar3.
2.新建一个test,调用刚录制的那个action 。然后再录制在word中输入一段文字。
3.将文字改为环境变量getchar3的值,这样在word中就会输出验证码的值了。第二个test的代码如下:
RunAction "Copy of Action1", oneIteration

msgbox environment.Value("getchar3")   #将环境变量的值用messagebox弹出来


myword=environment.Value("getchar3")        #将环境变量的值复制给一个变量
Window("Microsoft Word").WinObject("Microsoft Word 文档").Type myword #这句是录制得到的。本来是Type "1234",将"1234"改为type。
三、完整的登录OA系统。以下是action name为oa_login_code的代码内容。先录制不带web的识别验证码的checkcode action,再勾选web addin 录制登录OA系统的action。录制时OA的登录界面是打开的状态。
在checkcode action中可以在file——setting--environment--internal value,看到getchar。但在调用它的action中不能看到这个环境变量值。直接使用这个环境变量即可。
RunAction "Copy of checkcode", oneIteration MyWebElement=environment.Value ("getchar") Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("authcode").Set MyWebElement Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j_username").Set "078057" 
Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j password")

Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j_password").SetSecure "541303024777c70d"


Browser("流程管道,知识活水").Page("流程管道,知识活水").Image("Submit").Click 2,12
其中checkcode action的代码:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")

运行完整action后的结果:

 
错误记录一:上面的代码是以windows的方式录制了截图验证码图片读取其中的文本值,将其存为环境变量getchar。我将值存为global data ,回放的时候这个值不会变,存为环境变量则每次都能获取到正确的验证码。
错误记录二:我单独运行调用程序时,在qtp自己的result中可以看到验证码获取成功。但是先用户名、再密码,再验证码,获取的验证码的值就为空。于是将调用识别验证码的语句放在第一句,先输入验证码(上面的代码是运行成功的代码)。这样就可以成功登录了。可能是因为截图识别框要靠鼠标和坐标抓取。

通过识别验证码的程序学习到:

1.屏蔽多行,单独验证某行看是否通过。然后再执行多步
2.qtp的验证码识别是通过抓取图片中的文本进行识别。现在只能识别英文。如果录制时选择中文(在tools-options--gui testing-text recognition中设置),也识别不到。
qtp11.5 OCR设置:在tools-options--gui testing-text recognition中设置。我在win7上装的只有OCR这一种方式。
3.录制时,有时候录制不生成代码,有时候回放不成功,要重新打开IE浏览器。

qtp识别验证码的更多相关文章

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

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

  2. C#识别验证码技术-Tesseract

    相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握 ...

  3. java识别验证码

    所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...

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

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

  5. python识别验证码——一般的数字加字母验证码识别

    1.验证码的识别是有针对性的,不同的系统.应用的验证码区别有大有小,只要处理好图片,利用好pytesseract,一般的验证码都可以识别 2.我在识别验证码的路上走了很多弯路,重点应该放在怎么把图片处 ...

  6. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  7. Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干

    常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...

  8. Java使用J4L识别验证码

    1.首先要下载j4l的相应文件和jar 下载地址:http://www.java4less.com/ocrtools/ocrtools.php?info=download 2.下载完成之后解压,文件目 ...

  9. python 基于机器学习识别验证码

    1.背景    验证码自动识别在模拟登陆上使用的较为广泛,一直有耳闻好多人在使用机器学习来识别验证码,最近因为刚好接触这方面的知识,所以特定研究了一番.发现网上已有很多基于machine learni ...

随机推荐

  1. urllib库:分析Robots协议

    1from urllib.robotparser import RobotFileParser 2import ssl 3from urllib.request import urlopen 4ssl ...

  2. Who will be punished

    Who will be punished Problem Description This time,suddenly,teacher Li wants to find out who have mi ...

  3. linux信号调用机制

    在Linux中,信号是进程间通讯的一种方式,它采用的是异步机制.当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行. 需要说明的 ...

  4. Mysql 表空间和 数据页空洞

    一.表空间1.表空间: innodb 引擎存储的最高层: 存放所有的数据2.独立表空间:Mysql 版本 5.6 后默认开启的单表单空间(1)Innodb 默认存储引擎页的大小为 16K :默认表空间 ...

  5. 03: saltstack和ansible的区别和原理

    1.1 SaltStack.Ansible.Puppet比较 1.SaltStack 1. saltStack由Python编写,为server-client模式的系统,自己本身支持多master. ...

  6. Java编程思想读书笔记 第一章 对象导论

    抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构 ...

  7. python初始装饰器

    python装饰器: 一,函数名的运用. 函数名是一个变量,但他是一个特殊的变量与括号配合可以执⾏行行函数的变量 1.函数名的内存地址 def func(): print("呵呵" ...

  8. qt QAbstractItemModel一些方法介绍

    一. virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::Edit ...

  9. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  10. CentOS 设置 yum源

    什么是 yum Yum(全称 Yellow Dog Updater)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器.基于 RPM 包管理,能够从指定的 ...