【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容
时间:2019-11-14
本文章向大家介绍【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容,主要包括【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
==========================================================================================================
写在前面:
还是遇到了传说中的登录验证识别码数字图片,从网上找了一些例子,然后觉得比较好的连接地址记录下来,然后修改相关的内容成为能用的。
内容还是蛮实用的,方便以后查阅。
==========================================================================================================
参考链接:http://www.51testing.com/html/53/462853-3718359.html
遇到无法下载tesseract,然后网上查可以通过该目录进行下载安装。
https://blog.csdn.net/showgea/article/details/82656515
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(); } }
原文地址:https://www.cnblogs.com/conquerorren/p/11858614.html
- 第三章 C++中的C ----《C++编程思想》
- Publica公司以7.5万美金买下域名publica.com
- Java程序员的日常 —— 《编程思想》包和访问权限
- 开启服务和停止服务
- Python生成器和迭代器
- Oracle Redo 以及 Archived日志简述
- 前端那点事儿——Tocify自动生成文档目录
- CIOCP自定义帮助函数
- Flask 程序的基本结构
- CIOCPServer的数据结构定义及内存池方案
- Elasticsearch——禁止Body中的index覆盖Url中的index参数
- Python模块
- 学问Chat UI(3)
- Head插件——学习Elasticsearch的锋刃利器!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- volatile关键字 Krains 2020-08-26
- synchronized关键字 Krains 2020-08-25
- happens-before Krains 2020-08-26
- ReentrantLock可重入锁 Krains 2020-08-27
- Java中的线程 Krains 2020-08-24
- CAS Krains 2020-08-25
- 96. 不同的二叉搜索树 II Krains 2020-09-03 树
- 410. 分割数组的最大值 Krains 2020-08-29 20:21:39 动态规划二分查找
- 字典树 Krains 2020-09-01
- redis学习(十)
- vue修改浏览器的标题title
- 天天基金网数据接口
- Centos7实现开机自启EasySwoole
- input内文字与光标的初始位置调整
- 小程序push、unshift、concat