Java实现验证码识别

时间:2025-04-04 15:21:20


一、准备工作
安装JDK并配置环境变量。
安装Eclipse或IntelliJ IDEA作为开发工具。
安装Selenium WebDriver库和Tesseract-OCR库。
二、打开网站并设置浏览器窗口
首先,打开浏览器并将窗口最大化,以确保每次截取的图片都是相同的大小:

java

import ;
import ;
import ;

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();
    }
}
三、截取带有验证码的网页内容
截取当前屏幕内容,并保存到本地:

java

import ;
import ;

import ;
import ;
import ;

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs();
        try {
            (screenshot, new File("H://test/"));
        } catch (IOException e) {
            ();
        }
    }
}
四、识别图片验证码
使用 Tesseract 识别图片验证码
定位验证码在图片中的位置并截取:
java

import .;
import .;

import ;
import ;
import ;
import ;
import ;

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs();
        try {
            (screenshot, new File("H://test/"));
        } catch (IOException e) {
            ();
        }

        try {
            BufferedImage fullImg = (new File("H://test/"));
            BufferedImage captchaImg = (564, 395, 79, 28); // 验证码位置
            (captchaImg, "png", new File("H://test/"));

            Tesseract tesseract = new Tesseract();
            ("path/to/tessdata"); // 设置tessdata路径
            String captchaText = (captchaImg).trim();
            ("Captcha: " + captchaText);
        } catch (IOException | TesseractException e) {
            ();
        }
    }
}
五、输入账号、密码和验证码
定位账号、密码和验证码输入框,并输入相关内容:

java

import ;
import ;

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs();
        try {
            (screenshot, new File("H://test/"));
        } catch (IOException e) {
            ();
        }

        try {
            BufferedImage fullImg = (new File("H://test/"));
            BufferedImage captchaImg = (564, 395, 79, 28); // 验证码位置
            (captchaImg, "png", new File("H://test/"));

            Tesseract tesseract = new Tesseract();
            ("path/to/tessdata"); // 设置tessdata路径
            String captchaText = (captchaImg).trim();
            ("Captcha: " + captchaText);

            WebElement username = (("username"));
            WebElement password = (("password_1"));
            WebElement captcha = (("user_ck"));

            ("your_username");
            ("your_password");
            (captchaText);
        } catch (IOException | TesseractException e) {
            ();
        }
    }
}
六、点击登录按钮
定位并点击登录按钮:

java

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs();
        try {
            (screenshot, new File("H://test/"));
        } catch (IOException e) {
            ();
        }

        try {
            BufferedImage fullImg = (new File("H://test/"));
            BufferedImage captchaImg = (564, 395, 79, 28); // 验证码位置
            (captchaImg, "png", new File("H://test/"));

            Tesseract tesseract = new Tesseract();
            ("path/to/tessdata"); // 设置tessdata路径
            String captchaText = (captchaImg).trim();
            ("Captcha: " + captchaText);

            WebElement username = (("username"));
            WebElement password = (("password_1"));
            WebElement captcha = (("user_ck"));

            ("your_username");
            ("your_password");
            (captchaText);

            WebElement loginButton = (("yt0"));
            ();
        } catch (IOException | TesseractException e) {
            ();
        }
    }
}
七、关闭浏览器
最后,关闭浏览器:

java

public class Main {
    public static void main(String[] args) {
        ().setup();
        WebDriver driver = new ChromeDriver();
        ("");
        ().window().maximize();

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs();
        try {
            (screenshot, new File("H://test/"));
        } catch (IOException e) {
            ();
        }

        try {
            BufferedImage fullImg = (new File("H://test/"));
            BufferedImage captchaImg = (564, 395, 79, 28); // 验证码位置
            (captchaImg, "png", new File("H://test/"));

            Tesseract tesseract = new Tesseract();
            ("path/to/tessdata"); // 设置tessdata路径
            String captchaText = (captchaImg).trim();
            ("Captcha: " + captchaText);

            WebElement username = (("username"));
            WebElement password = (("password_1"));
            WebElement captcha = (("user_ck"));

            ("your_username");
            ("your_password");
            (captchaText);

            WebElement loginButton = (("yt0"));
            ();
        } catch (IOException | TesseractException e) {
            ();
        } finally {
            ();
        }
    }
}
八、问题和解决方案
Tesseract-OCR 报错解决方案
在使用 Tesseract 识别图片时,如果报错 tesseract-ocr 相关信息,可以通过 tesseract-ocr 下载 页面下载并安装 tesseract-ocr。

设置 Tesseract 实例的 datapath,确保其指向 tesseract-ocr 的安装路径:


Tesseract tesseract = new Tesseract();
("path/to/tessdata"); // 设置tessdata路径