这是我第一次发博客,若有问题,请多多指教!

本次是为了帮忙解决,如果在平时自动化遇到有验证码填写的情况,我们如何成功登录情况。

思路:

首先我们先将验证码复制并保存成一个图片,然后使用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自动输入验证码_【自动化测试】使用Java+selenium填写验证码成功登录相关推荐

  1. java mysql 输入数据库_如何用JAVA录入数据到SQL数据库

    Java可以使用e68a8462616964757a686964616f31333361326236JDBC对数据库进行读写.JDBC访问一般分为如下流程: 1.加载JDBC驱动程序: 在连接数据库之 ...

  2. java自动推断类型_推断:Facebook的新Java静态分析工具

    java自动推断类型 如何使用Facebook的Infer改善Java开发工作流程? 如果您与技术话题保持同步(如果您正在阅读此博客,我想您会这样做),那么您可能听说过Facebook 刚刚向公众发布 ...

  3. java 错误输入异常_在Java中进行输入验证期间用错误通知替换异常

    java 错误输入异常 在我以前的文章中,我写了一篇关于输入验证设计的文章 ,该设计取代了难以维护和测试的 if-else块. 但是,正如某些读者指出的那样,它有一个缺点–如果输入数据有多个验证错误, ...

  4. java自动生成类_自动生成优化的Java类专业知识

    java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...

  5. java实验10流_实验9 Java输入输出流

    <实验9 Java输入输出流>由会员分享,可在线阅读,更多相关<实验9 Java输入输出流(14页珍藏版)>请在金锄头文库上搜索. 1.山 西 大 学 计 算 机 与 信 息 ...

  6. java控制台输入汉字_给我一个JAVA控制台输入中文的实例

    给我一个JAVA控制台输入中文的实例 关注:205  答案:3  mip版 解决时间 2021-01-27 14:43 提问者葃日懙妳 2021-01-26 20:40 越简单越好,就是运行之后出了控 ...

  7. java自动创建月份_使用Java根据月份动态绘制BarGraph

    您需要通过每次更改来更新数据集.我添加了一个updateDataset()方法,并在几个关键位置调用了它. private void updateDataset() { dataset.clear() ...

  8. java自动投票软件_如何编写一个自动投票程序

    *********************************************************************************** *                ...

  9. 新手学java 学哪方面_初学者学Java应从哪些方面学习?

    原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...

最新文章

  1. gta线上服务器维护,gtaol线上云服务器
  2. c语言有参有类最小公倍数,C语言求最大公约数和最小公倍数算法
  3. .Net Framework 4.0 中利用Task实现并行处理、串并行混合处理
  4. Mac 技术篇-mac远程桌面直接连接windows系统,微软官方工具Microsoft Remote Desktop远程桌面工具安装与使用
  5. class_create
  6. pythony语法小练习
  7. [代码]ural 1655 Somali Pirates
  8. PHPCMS 模板的设置
  9. getparent_Java文件类字符串getParent()方法(带示例)
  10. 关于wamp5中(apache)设置虚拟主机
  11. 【Hadoop】java.io.IOException: Failed on local exception: java.nio.channels.ClosedByInterruptException
  12. centos 7.6镜像_Centos7 配置本地yum源为iso镜像
  13. 软件测试对计算器的测试,软件测试计算器的测试用例
  14. SQL获取当前时间的前10天
  15. [4G5G专题-17]:需求-5G发展的主要驱动力
  16. “管家婆”软件用于维修管理 (转)
  17. vagrant lanp mysql远程登录设置
  18. 如何为您的客户创造价值?
  19. java输出格林威治时间,Java之格林威治时间格式转换成北京时间格式
  20. 大锤老湿教您如何配置TP-Link路由器组建wifi上网

热门文章

  1. jquery 文件管理
  2. 数字IC设计实现之hold violation修复大全
  3. php显示标题控制长度,wordpress控制文章标题长度的问题
  4. 加油站收银软件提高油站运营管理效率?
  5. 黑客帝国代码雨怎么弄?(最全,最简单,看完就会)
  6. 分分钟上手C#的委托和事件
  7. mysql natural join_MySQL STRAIGHT_JOIN 与 NATURAL JOIN
  8. 每日一练 JS30天挑战 数组操作实例
  9. 水果销售系统课程设计(第一阶段--需求分析)
  10. EXCEL的VBA编程基础1