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();
        }
相关推荐
君顾17 分钟前
家政派单小程序源码开发实战:从零搭建到上线全流程指南
java·开发语言·家政派单
流烟默8 分钟前
HTTP 连接管理技术梳理:JDK KeepAliveCache 机制与池化选型
java·网络协议·http
阿酷tony26 分钟前
视频专栏列表的防录屏水印和跑马灯效果(也可网站调用)
java·前端·音视频
洋不写bug42 分钟前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
xcl092544 分钟前
全民健身智慧管理系统实战指南:从架构设计到部署落地
java·spring boot
Bs_MoneyMagnet1 小时前
基于springboot+vue的宠物殡葬管理平台的设计与实现 源码+文档
java·javascript·vue.js·spring boot·后端·宠物
ly76891 小时前
生产环境 Spring Boot 应用内存泄漏排查实战
java·spring boot·spring·内存泄漏·threadlocal·gc日志·堆转储
IT小白杨1 小时前
eBay多账号如何应对关联判定:主体、收款、IP、环境四层配置清单一次讲清
java·网络·网络协议·tcp/ip·自动化·指纹浏览器
無a伟2 小时前
RabbitMq高级特性:TTL,死信队列,延迟队列
java·分布式·rabbitmq
长谷深风1112 小时前
Agent 跑了 30 分钟宕机,如何从断点继续?
java·大数据·人工智能·ai·大模型·memory·aiagent