【自动化测试】使用Java+selenium填写验证码成功登录
这是我第一次发博客,若有问题,请多多指教!
本次是为了帮忙解决,如果在平时自动化遇到有验证码填写的情况,我们如何成功登录情况。
- 思路:
首先我们先将验证码复制并保存成一个图片,然后使用tesseract-ocr这个光学软件识别成txt文件,接着我们只要读取txt文件的内容即可
2. 使用工具:
Eclipse、selenium、火狐、log4j、AUTOIT_3.3.14.1、tesseract-ocr
3. 安装软件
I. eclipse安装,直接网上下载并安装即可
II.Selenium和log4j,这两个是个jar包,只需要下载下来即可,然后我们建立项目的时候,可以建立一个文件lib保存起来
如图:

如何使用这两个jar包?项目à右键—>构建路径à配置购置路径à点击添加jarj即可

III.火狐安装,建议默认安装吧。免得到时候在代码还需添加一句寻找火狐的路径
IV.AUTOIT_3.3.14.1安装,为什么安装这个呢?是为了解决window自带的操作,例如保存,因为我需要用到另存为图片,所以这个可以帮我解决。安装嘛,我是直接一直next
V. tesseract-oc,同理安装,不过需要重启一下电脑,它才会把路径写入path
- 解决验证码的步骤
public static void baoCunTuPian(WebDriver driver) throws AWTException, InterruptedException{
//右键点击浏览器的属性
Actions action = new Actions(driver);
action.contextClick(driver.findElement(By.id("ImageButton1"))).build().perform();
System.out.print("右键打开浏览器属性成功\n");
Robot robot = new Robot();
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
System.out.print("移动到查看图像");
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
System.out.print("移动到复制图像" +
"\n");
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
System.out.print("移动到复制图像地址\n");
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
System.out.print("移动到将图像另存为\n");
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(1000);
System.out.print("点击图像弹出另存\n");
robot.keyRelease(KeyEvent.VK_DOWN);//释放向下键,不然在此之前的条目将起作用
Thread.sleep(1000);
try {
Runtime.getRuntime().exec("c:\\test11.exe");//运行保存
System.out.print("保存图片成功\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这段代码分两部分来解读:右键弹出属性和保存图片

我们将鼠标的位置指向验证码的图片,然后右键点击
如图:

然后我们需要找到“将图像另存为”

这段代码就是描述我们如何找到另存并保存起来
接着,弹出来的另存为的操作就不再是java能够操作的了,我们这时候需要用到另外类似VB的脚本语言,于是我们的AUTOIT登场了。

使用AutoitInfo.exe来定位


然后打开我们的脚本编写工具SciTE.exe

PS:其实下面的那段代码我也不是很懂

本段代码是为了清理我要存在图片路径是否存在同名,如果同名先删除同名图片

这段代码是将我们另存的图片名为a.png,然后保存到c盘。
我们写好了这段代码之后,接着使用ctrl+F7,即可将它变为EXE文件。如果报病毒,请不要理它,保证百分百没有病毒的。

好了我们接着就需要调用我们的脚本。我的脚本名字为test11.exe,保存在本机的C盘
OK,我们现在就已经把图片的保存位置搞定。接着我们需要用tesseract-ocr这个软件来识别我们的图片内容,使用的代码是dos命令,
命令如下:tesseract.exe c:/a.png c:/a -psm 6
意思是:将C盘下的a.png识别并保存到C盘的a.txt
有些人用 tesseract.exe c:/a.png c:/a -l 就解决了,我的不知道为何需要用-psm 6才能解决
我们将这条命令保存为.bat格式即可

然后,我们用java的Runtime.getRuntime().exec() 这个方法就可以调用。
既然已经保存为文件格式,那么我们就需要来读取文件的内容,读取文件内容的代码,我也不讲述了
public static String txt2String(File file){
String result = "";
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result = result + "\n" +s;
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
主方法调用
File file = new File("c:/a.txt");//读取文件
System.out.println(txt2String(file)+"a");
存在的问题:orc识别率还是很低,登录成功几率还没有超过90%,有待提高
解决方案:训练orc的识别率(有时间再推出类似相关的文章)
【自动化测试】使用Java+selenium填写验证码成功登录的更多相关文章
- Java豆瓣电影爬虫——模拟登录的前世今生与验证码的爱恨情仇
前言 并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志! 从<为了媳妇的一张号,我与百度医生杠上了>里就有网友 ...
- 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 《手把手教你》系列技巧篇(六十四)-java+ selenium自动化测试 - cookie -中篇(详细教程)
1.简介 今天按照原计划宏哥要用实例来给小伙伴或童鞋们来演示一下,如何利用cookie实现跳过验证码进行登录.这个场景是自动登陆.有很多系统的登陆信息都是保存在cookie里的,因此只要往cookie ...
- IDEA+Java:Selenium+Maven+TestNG基本WebUI自动化测试环境搭建
IDEA+java:Selenium+Maven+TestNG 本文介绍的测试环境,应该是最基本的测试环境了,也是很多文章都有写,这里做一个完整的图文配置整理,方便阅读理解! 使用maven的好处,由 ...
- 我的自动化测试历程(Selenium+TestNG+Java+ReportNG+Jenkins)
原地址:http://blog.csdn.net/shilinjie_8952/article/details/53380373?locationNum=11&fps=1 测试环境:Java+ ...
- Java+Selenium+Testng自动化测试学习(二)
Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...
- 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...
- 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...
- 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...
随机推荐
- CMDB资产管理系统开发【day26】:linux客户端开发
客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...
- RubyMine 2017.3.2破解教程
下载地址:http://www.3322.cc/soft/35519.html RubyMine 2017.3.2破解版是一款专为Ruby和Rails开发者准备的IDE(被誉为最智能的Ruby和Rai ...
- JProfiler性能分析工具
1.简介 JProfiler是一个商业授权的Java剖析工具,用于分析Java EE和Java SE应用程序. 2.JVMTI JDK本身定义了目标明确并功能完善的JNI(Java Native In ...
- LFYZ-OJ ID: 1015 统计数字(NOIP2007)
分析 本体思路很简单:读入数据,排序.统计.输出.难点在于数据量较大,选择何种排序方法就极为重要,否则很容易发生内存或时间超限.可以考虑以下几种思路: 桶排序 桶排序是可以想到的最简单方法,可在O(n ...
- HP Z620 Windows 7 系统安装(含磁盘阵列)
由于HP Z620 做了Raid 5磁盘阵列,导致安装系统时,系统加载不了磁盘的驱动,无法将系统安装到硬盘上,正确的方法是:下载SATA驱动,在需要加载驱动的地方,利用另一个U盘,“浏览”解压好的驱动 ...
- k64 datasheet学习笔记25--Multipurpose Clock Generator (MCG)
0.前言 MCG模块为MCU提供了几种可选时钟源.模块包含一个FLL和一个PLL.FLL使用内部或外部参考时钟是可控的,PLL受外部参考时钟控制 模块可以选择FLL或PLL输出时钟,或内/外部参考时钟 ...
- 给Ubuntu系统清理垃圾
原文地址:https://blog.csdn.net/levon2018/article/details/81746613 1.清理下载的软件包 不过与你想象的可能有很大的不同,Ubuntu系统在运 ...
- Lua中的表达式
[算术操作符] Lua支持常规的算术操作符有:”+”(加法),”-“(减法),”*”(乘法),”/”(除法),”^”(指数),”%”(取模),一元的”-“(负号).所有的这些操作符都用于实数.例如:x ...
- Beta冲刺(1/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...
- Django ----- app 和 ORM的操作和介绍
创建APP ORM 介绍 ORM的操作 说明一下 GET 和 POST 的区别: , GET ①获取一个页面 ②提交数据 数据显示在URL ?user=alex&pwd=alexdsb ,PO ...