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

写在前面:

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

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

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

参考链接: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. activiti学习3:流程引擎对象和流程引擎配置对象

    目录 activiti学习3:流程引擎对象和流程引擎配置对象 一.activiti的简单使用流程 二.流程引擎配置对象ProcessEngineConfiguration的介绍 三.activiti配 ...

  2. MySQL [Err] 1055--1064 - Expression #1 of ORDER BY clause is not in GROUP BY clause

    1055错误: 方案1: 修改sql_mode的值 set sql_mode = '';set sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL ...

  3. 1.4 Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)

      当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷 ...

  4. Nginx+Keepalived实现web服务器高可用

    1.Nginx 业务背景 现公司需求快速搭建web服务器,对外提供给用户web服务. 需求拆分 需要基于http协议的软件,搭建服务实现 介绍 常见用法: 1) web服务器软件 httpd http ...

  5. 选redis还是memcache,源码怎么说

    转自: https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961272&idx=1&sn=79ad515b01 ...

  6. 【剑指offer】1+….+n,不能使用相关关键字

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析:可以使用递归! class Soluti ...

  7. 微信JS从1.0.0升级到1.1.2的一个坑

    因为1.0.0不支持电脑端日期Picker滚动,升级成了1.1.2,结果发现日期选择不起作用了经过跟踪发现 通过控制台查看 resut[1].toString()居然是number类型,修改代码为() ...

  8. Redis 多级缓存架构和数据库与缓存双写不一致问题

    采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat堆缓存的多级缓存架构 时效性要求非常高的数据:库存 一般来说,显示的库存,都是时效性要求会相对高一些,因为随着商品的不断的交易,库存 ...

  9. mssql server 排序 以及like语句

    当我们按照某个字段排序时,通常使用order by语句,如果该字段存在null值,则会把null值的这条放到最上面, 那我们是否有办法解决呢? 答案是肯定的: ORDER BY CASE WHEN O ...

  10. Ext下载文件

    项目中前台用的是Ext JS,要从数据库中查询数据并导出为Excel表格 对此研究了下,代码如下: 前台代码: /** * 进行下载文件(form方式) */ _downloadDraft:funct ...