wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【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://sourcef

【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

【java+selenium3】Tesseract-OCR识别图片验证码 (十六)

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

5.java调用该bat文件

@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识别图片验证码 (十六)

@H_618_389@8.总结:使用Tesseract-OCR识别图片验证码成功率太低,正在寻找更好的方法

大佬总结

以上是大佬教程为你收集整理的【java+selenium3】Tesseract-OCR识别图片验证码 (十六)全部内容,希望文章能够帮你解决【java+selenium3】Tesseract-OCR识别图片验证码 (十六)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。