java+selenium+Tesseract-OCR识别图片验证码
1、下载安装Tesseract-OCRTesseract-OCR Windows安装包下载:https://digi.bib.uni-mannheim.de/tesseract(安装时顺便安装语言包)若未在安装时安装语言包,语言库地址为:https://github.com/tesseract-ocr/tessdata将所需要的语言库下载下来,放在C:\Program Files (x86)\Te
1、下载安装Tesseract-OCR
Tesseract-OCR Windows安装包下载:https://digi.bib.uni-mannheim.de/tesseract
(安装时顺便安装语言包)
若未在安装时安装语言包,语言库地址为:https://github.com/tesseract-ocr/tessdata
将所需要的语言库下载下来,放在C:\Program Files (x86)\Tesseract-OCR\tessdata目录下
2、配置变量环境
Path后加C:\Program Files (x86)\Tesseract-OCR
新建TESSDATA_PREFIX:C:\Program Files (x86)\Tesseract-OCR\tessdata
打开cmd,输入测试语句tesseract -v,出现版本号则安装成功
3、打开登录界面
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
driver.get();
4、截图,获得验证码图片
WebElement yanzhengmaPic = driver.findElement(By.xpath());
// 截图整个页面
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage img = ImageIO.read(srcFile);
// 获取元素的高度和宽度
int width = yanzhengmaPic.getSize().getWidth();
int height = yanzhengmaPic.getSize().getHeight();
// 得到元素坐标
Point p = yanzhengmaPic.getLocation();
// 创建一个高度宽度与元素一致的矩形
Rectangle rect = new Rectangle(p.x,p.y,height,width);
// 获得验证码截图
BufferedImage dest = img.getSubimage(p.getX(), p.getY(), rect.width,rect.height);
ImageIO.write(dest, "png", srcFile);
FileUtils.copyFile(srcFile,new File("D:/selenium/test.png"));
5、使用tesseract-ocr进行图像识别
String cmd = "cmd /k start D:/selenium/tesseract.bat";
Runtime.getRuntime().exec(cmd);
tesseract.bat代码为
@echo off
tesseract.exe D:\selenium\test.png D:\selenium\result -psm 6
Exit
6、读取识别文件
File file = new File("D:/selenium/result.txt");
StringBuffer stringBuffer = new StringBuffer();
if(file.isFile() && file.exists()){
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String text;
while((text = bufferedReader.readLine()) != null){
stringBuffer.append(text);
}
}
7、因识别后为算式,进行演算
String input = stringBuffer.toString();
char[] inputSplit = new char[input.length()];
String yanzhengma = "";
for(int i = 0;i<input.length();i++){
if(input.charAt(i) == 61){
break;
}
inputSplit[i] = input.charAt(i);
System.out.println(inputSplit[i]);
yanzhengma += inputSplit[i];
}
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
8、将计算结果填入验证码框
driver.findElement(By.xpath()).input;
更多推荐
所有评论(0)