java-selenium 截取界面验证码图片并对图片文本进行识别

参考链接

1、需要下载Tesseract工具并配置环境变量,步骤如下

Tesseract-OCR 下载安装和使用_tesseract-ocr下载-CSDN博客

2、需要在IDEA中导入tess4j 包;在pom.xml文件中输入如下内容

复制代码
        <!--导入Tesseract 用于识别验证码-->
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.5.4</version>
        </dependency>

3、查看本地电脑是否有Microsoft VisualC++2019 如果没有则需要下载不然运行代码时会出现'无法找到指定模块'的报错

如果没有的话下载链接如下:
Microsoft Visual C++ 2019等其他版本下载链接-CSDN博客

4、当将上面的步骤中的配置完成后,那么就可以敲代码了。首选需要打开网站

复制代码
driver = ChromeDriverConfig.getChromeDriver();//调用驱动类方法获取驱动对象
        driver.get("https://www.baidu.com");//打开网站
        driver.manage().window().maximize();//窗口最大化
        String KyxUrl=driver.getCurrentUrl();
        System.out.println("获取打开界面链接地址是"+KyxUrl);
        Assert.assertEquals(KyxUrl,"https://www.baidu.com","地址不同");

5、打开网站后截取整个界面,并将截取下的图片保存在指定目录中,代码如下

概步骤是为了做个验证 查看获取的验证码图片是否正确,加不加都行,重点是获取验证码的图片

复制代码
try {
            //截取当前屏幕内容,并保存到本地
            File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            //将截取下来的图片保存到指定目录并指定文件名
            // D:\Program Files\IntelliJ IDEA 2023.3.2\NewMedia\imgTest\01.png  
            File pathFile = new File("D:\\Program Files\\IntelliJ IDEA 2023.3.2\\NewMedia\\imgTest\\01.png");
            if (pathFile.exists()) {//判断文件是否存在
                pathFile.delete();//如果文件存在则删除
            }
            //将屏幕截图移动到指定目录
            FileUtils.moveFile(screenshot, new File("D:\\Program Files\\IntelliJ IDEA 2023.3.2\\NewMedia\\imgTest\\01.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

6、如图所示,验证码的html标签显示如下,可以通过xpath中

复制代码
By.tagName("img")来定位到验证码图片。

定位到图片后,下载二维码图片到指定目录,并通过下载的Tessercat来对验证码图片进行读取并将文本内容输出为字符串。具体代码如下:

复制代码
//定义图片存放路径包括文件名
        String eleLocalFileFullName = "D:\\Program Files\\IntelliJ IDEA 2023.3.2\\NewMedia\\imgTest\\Test.png";
        //本地文件转为文件类型
        File eleLocalFile = new File(eleLocalFileFullName);
        //通过By.tagName("img")定位验证码图片位置
        WebElement captchaImg = driver.findElement(By.tagName("img"));
        //截取二维码图片并下载到本地默认目录
        File eleScreenShotFile = captchaImg.getScreenshotAs(OutputType.FILE);
        //判断指定目录中Test.png是否存在如果存在则删除
        if(eleLocalFile.exists()){
            eleLocalFile.delete();
        }
        //将本地默认路径中的验证码截图文件移动到指定目标
        FileUtils.moveFile(eleScreenShotFile, eleLocalFile);
        //实例化ITesseract
        ITesseract tesseract = new Tesseract();
        // 设置 Tesseract 数据路径,这里需要指向 tessdata 文件夹
        tesseract.setDatapath("D:/Program Files/Tesseract-OCR/tessdata");
        try{
            // 设置识别语言,eng默认为英文,中文简体设置为"chi_sim"
            tesseract.setLanguage("eng");

            //读取本地图片文件
            // 读取本地图片文件
            String pathToImageFile = "D:/Program Files/IntelliJ IDEA 2023.3.2/NewMedia/imgTest/Test.png";
            File imageFile = new File(pathToImageFile);

            // 执行OCR识别
            String ocrResult = tesseract.doOCR(imageFile);
            // 输出识别结果
            System.out.println(ocrResult);

        }catch (TesseractException e){
            e.printStackTrace();
        }
相关推荐
Java牛马9 分钟前
Caffeine 缓存及其应用相关总结
java·redis·缓存·caffeine·数据一致性·本地缓存
一只叫煤球的猫40 分钟前
Spring AI 2.0 源码解析(三):ChatClient 的 Fluent API 如何构建请求?
java·后端·面试
软件开发JR1 小时前
基于Web的足球青训俱乐部管理后台系统的设计与开发
java·前端·spring boot·毕业设计
重生之我是Java开发战士1 小时前
【Java EE】Spring AOP :面向切面编程
java·spring·java-ee
凤山老林1 小时前
基于 Spring Batch 的海量数据迁移与批处理架构:分片、容错与断点续跑
java·spring boot·spring·架构·spring batch
Javatutouhouduan1 小时前
Java初学者如何高效学习JVM?
java·jvm·java虚拟机·java面试·后端开发·java程序员·java八股文
TELL5211 小时前
启动后端服务跑第一个用例成功,重新跑第二个用例chromedriver死活不成功,猜测是chromedriver本身的问题
selenium·webdriver
ZJU_统一阿萨姆2 小时前
【算子开发】全局内存访问与合并访存
java·服务器·网络·人工智能·语言模型
7177772 小时前
不止工具集成:基于 Gitee 软件工厂构建 DevSecOps 研发治理底座
java·服务器·gitee
gis开发之家2 小时前
Spring Boot 4 深度解析——参数接收大全:@RequestParam、@PathVariable、@RequestBody
java·spring boot·后端·spring