【Selenium-WebDriver实战篇】基于java的selenium之验证码识
别内容
==========================================================================================================写在前⾯:
还是遇到了传说中的登录验证识别码数字图⽚,从⽹上了⼀些例⼦,然后觉得⽐较好的连接地址记录下来,然后修改相关的内容成为能⽤的。
内容还是蛮实⽤的,⽅便以后查阅。
==========================================================================================================
参考链接:
遇到⽆法下载tesseract,然后⽹上查可以通过该⽬录进⾏下载安装。
遇到的第三个问题是:对有噪点的图⽚使⽤tesseract⼯具时,识别结果很差,但是对⿊⽩照⽚视频很好,所以想到了把图⽚⿊⽩化后再识别。
Tess4J识别OCR相关:
识别验证码切割后的算法:
在识别的道路上总是遇到各种各样的问题,现在可以裁剪图⽚了,但是裁剪后的原图是倾斜的,所以识别率也很低,于是到旋转图⽚的⽅法。
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.HttpURLConnection;
import java.URL;
/*准备⼯具:
* 1.下载安装tesseract:sourceforge/projects/tesseract-ocr/
* 2.将命令保存为bat⽂件,bat内容为
* @echo off
< 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_";
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 = InputStream();
//得到图⽚的⼆进制数据,以⼆进制封装得到数据,具有通⽤性
byte[] data =readInputStream(inStream);
//new⼀个⽂件对象⽤来保存图⽚,默认保存当前⼯程根⽬录
File imageFile = new File(strPath);
//创建输出流
java streamoutStream = 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 {
catch (IOException e) {
/
/ TODO Auto-generated catch block
<("运⾏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() && ists()) { // 判断⽂件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);// 考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
while ((lineTxt = adLine()) != null) {
Log.info(lineTxt);
IdentificateTxt = lineTxt;
}
read.close();
} else {
<("----不到指定的⽂件");
} } catch (Exception e) {
<("读取⽂件内容出错",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( (ad(buffer)) != -1 ){
/
/⽤输出流往buffer⾥写⼊数据,中间参数代表从哪个位置开始读,len代表读取的长度 outStream.write(buffer, 0, len);
}
//关闭输⼊流
inStream.close();
//把outStream⾥的数据写⼊内存
ByteArray();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论