==========================================================================================================

写在前面:

还是遇到了传说中的登录验证识别码数字图片,从网上找了一些例子,然后觉得比较好的连接地址记录下来,然后修改相关的内容成为能用的。

内容还是蛮实用的,方便以后查阅。

==========================================================================================================

参考链接:http://www.51testing.com/html/53/462853-3718359.html

遇到无法下载tesseract,然后网上查可以通过该目录进行下载安装。

https://blog.csdn.net/showgea/article/details/82656515

遇到的第三个问题是:对有噪点的图片使用tesseract工具时,识别结果很差,但是对黑白照片视频很好,所以想到了把图片黑白化后再识别。

https://blog.csdn.net/zhulier1124/article/details/80606647

Tess4J识别OCR相关:

https://blog.csdn.net/zai_xia/article/details/80003778

https://sourceforge.net/p/tess4j/bugs/15/

识别验证码切割后的算法:https://www.cnblogs.com/zeze/p/5816742.html

https://www.cnblogs.com/nayitian/p/3282862.html

https://blog.csdn.net/qq_34351177/article/details/84992133

在识别的道路上总是遇到各种各样的问题,现在可以裁剪图片了,但是裁剪后的原图是倾斜的,所以识别率也很低,于是找到旋转图片的方法。

https://blog.csdn.net/x541211190/article/details/80784713

package com.util;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/*准备工具:
* 1.下载安装tesseract:http://sourceforge.net/projects/tesseract-ocr/
* 2.将tesseract.exe命令保存为bat文件,bat内容为
* @echo off
tesseract.exe yzm.png 1 -l
exit
*获取验证码步骤:
*1、保存动态页面中的图片文件到本地;
download(URL地址, "code.png");
2、java运行tesseract批量处理bat文件​,产生TXT文件保存到本地;
String batPath = "cmd /c start G:\\uxin1\\selenium_xin\\code.bat";
runTesseractBat(String batPath)
3、读取TXT文件​;
String filepath="G:/uxin1/selenium_xin/code.txt";
readTextFile(filePath)
*/
public class analysisIdentifyingCode {
/*
* 根据url下载验证码图片并保存到指定的地址
* @strUrl 图片下载地址
* @strPath 保存路径
*/
public void download(String strUrl,String strPath) { FileOutputStream utStream = null;
try {
//打开链接
URL url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
//通过输入流获取图片数据
InputStream inStream = conn.getInputStream();
//得到图片的二进制数据,以二进制封装得到数据,具有通用性
byte[] data =readInputStream(inStream);
//new一个文件对象用来保存图片,默认保存当前工程根目录
File imageFile = new File(strPath);
//创建输出流
outStream = new FileOutputStream(imageFile);
//写入数据
outStream.write(data);
//关闭输出流
outStream.close(); } catch (Exception e) {
e.printStackTrace(); } finally { try { if (outStream != null) { outStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } /*
* java运行tesseract批量处理bat文件​,产生TXT文件保存到本地
* @batPath batPath 存放的二进制图片路径
*
*/
public void runTesseractBat(String batPath) throws InterruptedException{
String cmd = batPath;
Thread.sleep(2000);
try {
Runtime.getRuntime().exec(cmd); } catch (IOException e) { // TODO Auto-generated catch block
Log.error("运行tesseract批量处理bat文件异常", e);
} } /*
* 读取得到的txt文档读取获取到的文本内容
* @batPath batPath 存放的二进制图片路径
*
*/
public static String readTextFile(String filePath) {
String IdentificateTxt = null;
String lineTxt = null;
try { String encoding = "GBK"; File file = new File(filePath); if (file.isFile() && file.exists()) { // 判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding);// 考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
while ((lineTxt = bufferedReader.readLine()) != null) {
Log.info(lineTxt);
IdentificateTxt = lineTxt;
}
read.close(); } else { Log.error("----找不到指定的文件"); } } catch (Exception e) { Log.error("读取文件内容出错",e); }
return IdentificateTxt; }
/*
* 读取的文件流
* @batPath batPath 存放的二进制图片路径
*
*/
public static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream utStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while( (len=inStream.read(buffer)) != -1 ){
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
//关闭输入流
inStream.close();
//把outStream里的数据写入内存
return outStream.toByteArray();
}
}

【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容的更多相关文章

  1. (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

    selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...

  2. Selenium WebDriver原理(二):Selenium是如何操纵浏览器的?

    前言 上一篇文章<selenium webdriver 是怎么运行的>用了一个简单的例子--搭出租车,形象地讲解selenium webdriver 是如何运行的,而这一篇文章可以理解为深 ...

  3. 深度学习实战篇-基于RNN的中文分词探索

    深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...

  4. 基于LeNet网络的中文验证码识别

    基于LeNet网络的中文验证码识别 由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013 ...

  5. java selenium webdriver实战 seleniumIDE

    Selenium是ThoughtWorks公司,一个名为Jason Huggins的测试为了减少手工测试的工作量,自己实现的一套基于Javascript语言的代码库 使用这套库可以进行页面的交互操作, ...

  6. 【零基础】Selenium:Webdriver图文入门教程java篇(附相关包下载)

    一.selenium2.0简述 与一般的浏览器测试框架(爬虫框架)不同,Selenium2.0实际上由两个部分组成Selenium+webdriver,Selenium负责用户指令的解释(code), ...

  7. Selenium WebDriver TestNg Maven Eclipse java 简单实例

    环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...

  8. 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas

    1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...

  9. Selenium WebDriver原理(一):Selenium WebDriver 是怎么工作的?

    首先我们来看一个经典的例子: 搭出租车 在出租车驾驶中,通常有3个角色: 乘客 : 他告诉出租车司机他想去哪里以及如何到达那里 对出租车司机说: 1.去阳光棕榈园东门 2.从这里转左 3.然后直行 2 ...

随机推荐

  1. OI总结

    当下考的钟声叮当响起,该走了,一年半的OI竞赛就此结束 留下了很多遗憾.也拥有过一段美好的竞赛生活 结识了一群优秀的OI战友,一起进步一起开心一起忧愁,但这一切的一切都将在今晚变成过去式,CSp的好与 ...

  2. 【剑指offer】和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  3. springboot2.1.7整合mybati3.5.2与mysql8.0.13

    springboot2.x已经发布一段时间,博主在这里使用springboot2.1.7整合mybatis3.5.2,使用的数据库为mysql8.0.13 1. 导入依赖 <!--mysql-- ...

  4. php的json_encode第二个参数学习及应用

    php5.4以上: json_encode($data, JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); p ...

  5. Docker容器挂载文件(转载)

    一.Docker pull 安装 Nginx 1.查看docker仓库中的 nginx 命令 # 使用 docker search 命令搜索存放在 Docker Hub 中的镜像 docker sea ...

  6. 在Centos中安装.net core SDK

    在Linux中运行.net core 项目必须要有.net core SDK 环境.之前配置过几次,但由于没有做总结.过了几天又配置的时候 感觉特别陌生,今天就记录一次.net core SDK 的安 ...

  7. 高性能Golang研讨会【精】

    by Dave Cheney 概观 本次研讨会的目标是为您提供诊断Go应用程序中的性能问题并进行修复所需的工具. 通过这一天,我们将从小工作 - 学习如何编写基准,然后分析一小段代码.然后走出去讨论执 ...

  8. python 3.url了解与基础使用

    URL使用 视图: 我们运行项目在网页上查看到的我们称之为视图 视图一般在views.py下编辑 它的第一个参数永远都是request,通过它请求一些数据返回给网页给我们查看. 视图函数的返回结果必须 ...

  9. 2019 完美世界java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.完美世界等公司offer,岗位是Java后端开发,最终选择去了完美世界. 面试了很多家公司,感觉大部分公司考察的点 ...

  10. Mybatis中使用association及collection进行一对多双向关联示例(含XML版与注解版)

    XML版本: 实体类: package com.sunwii.mybatis.bean; import java.util.ArrayList; import java.util.List; impo ...