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;

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐