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();
        }
相关推荐
后端小张2 小时前
【JAVA进阶】Spring Boot 核心知识点之自动配置:原理与实战
java·开发语言·spring boot·后端·spring·spring cloud·自动配置
tg-zm8899967 小时前
2025返利商城源码/挂机自动收益可二开多语言/自定义返利比例/三级分销理财商城
java·mysql·php·laravel·1024程序员节
X***C8627 小时前
SpringBoot:几种常用的接口日期格式化方法
java·spring boot·后端
前端达人7 小时前
你的App消息推送为什么石沉大海?看Service Worker源码我终于懂了
java·开发语言
小光学长8 小时前
基于ssm的宠物交易系统的设计与实现850mb48h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
编程大师哥8 小时前
vxe-table 透视表分组汇总及排序基础配置
java
8***84828 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9***J6288 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
M***Z2108 小时前
SQL 建表语句详解
java·数据库·sql
v***7948 小时前
Spring Boot 热部署
java·spring boot·后端