【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容
==========================================================================================================
写在前面:
还是遇到了传说中的登录验证识别码数字图片,从网上找了一些例子,然后觉得比较好的连接地址记录下来,然后修改相关的内容成为能用的。
内容还是蛮实用的,方便以后查阅。
==========================================================================================================
参考链接: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之验证码识别内容的更多相关文章
- (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出
selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...
- Selenium WebDriver原理(二):Selenium是如何操纵浏览器的?
前言 上一篇文章<selenium webdriver 是怎么运行的>用了一个简单的例子--搭出租车,形象地讲解selenium webdriver 是如何运行的,而这一篇文章可以理解为深 ...
- 深度学习实战篇-基于RNN的中文分词探索
深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...
- 基于LeNet网络的中文验证码识别
基于LeNet网络的中文验证码识别 由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013 ...
- java selenium webdriver实战 seleniumIDE
Selenium是ThoughtWorks公司,一个名为Jason Huggins的测试为了减少手工测试的工作量,自己实现的一套基于Javascript语言的代码库 使用这套库可以进行页面的交互操作, ...
- 【零基础】Selenium:Webdriver图文入门教程java篇(附相关包下载)
一.selenium2.0简述 与一般的浏览器测试框架(爬虫框架)不同,Selenium2.0实际上由两个部分组成Selenium+webdriver,Selenium负责用户指令的解释(code), ...
- Selenium WebDriver TestNg Maven Eclipse java 简单实例
环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...
- 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas
1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...
- Selenium WebDriver原理(一):Selenium WebDriver 是怎么工作的?
首先我们来看一个经典的例子: 搭出租车 在出租车驾驶中,通常有3个角色: 乘客 : 他告诉出租车司机他想去哪里以及如何到达那里 对出租车司机说: 1.去阳光棕榈园东门 2.从这里转左 3.然后直行 2 ...
随机推荐
- 将SpringCloud Eureka 服务注册与发现部署到docker
一.前言 最近在学习docker,顺便把之前学习的spring cloud 部署到Docker 中.至于什么是SpringCloud的服务注册与发现,什么是docker,我这里就不作赘述了.可以先去学 ...
- static binding/dynamic binding
static binding/dynamic binding class Person { private void who() { System.out.println("Inside p ...
- LINGO与EXCEL之间的数据传递
前言 LINGO 作为非线性规划运算的专用软件,得出结果一般都是纯文本的一列数据,要想将数据呈现到论文当中,需要整理到 EXCEL 中,使用复制粘贴容易出错还费时,所以必须要动用函数来提高效率! 案例 ...
- Versioning information could not be retrieved from the NuGet package repository. Please try again later.
Versioning information could not be retrieved from the NuGet package repository. Please try again la ...
- 解决netty客户端接收报文不完整的情况
逻辑就是在处理handler前加入一个处理符,然后 channelReadComplete这个事件进行处理.同时注意客服端的配置: public void connect(String addr, i ...
- Python实现斐波那契递归和尾递归计算
##斐波那契递归测试 def fibonacciRecursive(deepth): if deepth == 1: return 1 elif deepth == 2: return 1 else: ...
- Golang转义字符
Golang常见的转义字符(escape char) \t 一个制表位,实现对齐的功能 \n 换行符 \\ 一个\ \" 一个" \r 一个回车 fm ...
- windwos源码安装mysql
进入官网下载相关的mysql安装文件,解压到指定目录如E:\mysql-5.7.23-winx64下,然后进入该目录下新建data文件夹与my.ini文件,在my.ini文件中 [mysqld] po ...
- Spark之RDD依赖关系及DAG逻辑视图
RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...
- hadoop细节 -> 持续更新
Hdfs: hdfs写流程: 客户端通过DistributedFileSystem请求namenode上传文件 Namenode进行检查,比如父路径 文件本身,是否允许上传 Namenode相应信 ...