大佬教程收集整理的这篇文章主要介绍了【java+selenium3】Tesseract-OCR识别图片验证码 (十六),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
【java+SELEnium+Tesseract-OCR(图片识别)+AutoIt(windows窗口识别)】完成自动化图片验证码识别!
一、AutoIt(windows窗口识别)参考:https://www.cnblogs.com/xiaozhaoboke/p/11138548.html
二、Tesseract-OCR(图片识别)
1. 官网下载 tesseract:http://sourceforge.net/projects/tesseract-ocr/
历史版本下载:https://digi.bib.uni-mAnnheim.de/tesseract/
2.安装tesseract,安装成功需要配置环境变量
PATH:安装目录(C:\Program Files (x86)\Tesseract-OCR)
TESSDATA_PREFIX:C:\Program Files (x86)\Tesseract-OCR\tessdata
3.语言库地址为:https://github.com/tesseract-ocr/tessdata
将所需要的语言库下载下来,放在F:\Program Files (x86)\Tesseract-OCR\tessdata目录下
4.将tesseract.exe命令保存为bat文件,bat内容为
@echo off tesseract.exe D:\yzm\yan.png D:\yzm\result -l exit
或者
@echo off tesseract.exe D:\yzm\yan.png D:\yzm\result -psm 6 exit
//注解: //图片路径D:\yzm\yan.png 生成txt文件存放路径及文件名result tesseract.exe D:\yzm\yan.png D:\yzm\result -l tesseract.exe D:\yzm\yan.png D:\yzm\result -psm 6
@H_675_85@public @H_675_85@static @H_675_85@void main(@R_618_10495@ng[] args) { @R_618_10495@ng cmd = "cmd /k start D:/yzm/tesseract.bat"; @H_675_85@try { Runtime.getRuntime().exec(cmd); } @H_675_85@catch (Exception E) { e.printStackTrace(); } }
//知识扩展 cmd命令执行窗口开闭指令 cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。 cmd /c start dir 会打开一个新窗口@R_419_2456@dir指令,原窗口会关闭。 cmd /k start dir 会打开一个新窗口@R_419_2456@dir指令,原窗口不会关闭。
运行成功后,会生成一个result.txt文件,该文件保存了验证码的文本内容
6.java代码执行tesseract.bat文件后读取txt文件返回验证码字符串代码实现,TXT读写详细参考:https://www.cnblogs.com/xiaozhaoboke/p/11177168.html
@H_675_85@package cn.xiaobing.util; @H_675_85@import java.io.bufferedReader; @H_675_85@import java.io.File; @H_675_85@import java.io.FileInputStream; @H_675_85@import java.io.InputStreamReader; @H_675_85@public @H_675_85@class ReadYZM { /** * 使用Tesseract-OCR识别图片验证码 */ @H_675_85@public @H_675_85@static @R_618_10495@ng read_yzm() { @R_618_10495@ng cmd = "cmd /c start D:/yzm/tesseract.bat"; @H_675_85@try { Runtime.getRuntime().exec(cmd); } @H_675_85@catch (Exception E) { e.printStackTrace(); } @H_675_85@try { //线程阻塞3秒等待tesseract.bat执行完成 Thread.sleep(3000); } @H_675_85@catch (InterruptedException E) { // TODO Auto-generated catch block e.printStackTrace(); } //执行tesseract.bat识别图片后生成result.txt文件中保存识别后验证码 //读取result.txt文件获取验证码 // ReadTxt @R_618_10495@ng yzmTxt = readTxt("D:/yzm/result.txt"); @H_675_85@return yzmTxt; } /**传入txt路径读取txt文件 * @param txtPath * @return 返回读取到的内容 */ @H_675_85@public @H_675_85@static @R_618_10495@ng readTxt(@R_618_10495@ng txtPath) { File file = @H_675_85@new File(txtPath); @H_675_85@if(file.isFile() && file.exists()){ @H_675_85@try { FileInputStream fileInputStream = @H_675_85@new FileInputStream(filE); InputStreamReader inputStreamReader = @H_675_85@new InputStreamReader(fileInputStream); BufferedReader bufferedReader = @H_675_85@new BufferedReader(inputStreamReader); @R_618_10495@ngBuffer sb = @H_675_85@new @R_618_10495@ngBuffer(); @R_618_10495@ng text = @H_675_85@null; @H_675_85@while((text = bufferedReader.readLine()) != @H_675_85@null){ sb.append(text); } @H_675_85@return sb.to@R_618_10495@ng(); } @H_675_85@catch (Exception E) { e.printStackTrace(); } } @H_675_85@return @H_675_85@null; } }
7.web自动化实战演示
@H_675_85@package cn.xiaobing.cases; @H_675_85@import java.io.File; @H_675_85@import java.io.IOException; @H_675_85@import org.apache.commons.io.FileUtils; @H_675_85@import org.openqa.SELEnium.by; @H_675_85@import org.openqa.SELEnium.WebElement; @H_675_85@import org.testng.Annotations.Test; @H_675_85@import cn.xiaobing.util.CreateElementScreenshot; @H_675_85@import cn.xiaobing.util.ReadYZM; @H_675_85@public @H_675_85@class TESTCase01 @H_675_85@extends BaseCase { @Test @H_675_85@public @H_675_85@void test() @H_675_85@throws InterruptedException { driver.get("http://sh.ipyy.com:8888/logins.html"); WebElement element = driver.findElement(By.id("yzmimg")); File img = CreateElementScreenshot.captureElement(element); @H_675_85@try { //调用FileUtils工具类,复制img图片,new File保存至新的路径下 FileUtils.copyFile(img,@H_675_85@new File("D:/yzm/yzm.png")); Thread.sleep(3000); //使用Tesseract-OCR识别图片验证码 @R_618_10495@ng str = ReadYZm.read_yzm(); driver.findElement(By.id("code")).sendKeys(str); Thread.sleep(3000); } @H_675_85@catch (IOException E) { e.printStackTrace(); } } }
以上是大佬教程为你收集整理的【java+selenium3】Tesseract-OCR识别图片验证码 (十六)全部内容,希望文章能够帮你解决【java+selenium3】Tesseract-OCR识别图片验证码 (十六)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。