首页 > 编程语言 >使用 Java 实现验证码识别与自动化登录

使用 Java 实现验证码识别与自动化登录

时间:2024-10-19 10:33:20浏览次数:1  
标签:Java String 登录 java http 验证码 org apache import

  1. 安装所需依赖
    首先,确保你已经安装了 JDK。可以使用 Maven 来管理依赖。在 pom.xml 中添加以下依赖:

xml

org.apache.httpcomponents httpclient 4.5.13 net.sourceforge.tess4j tess4j 5.3.0 2. 下载验证码图片 使用 Apache HttpClient 下载验证码图片并保存到本地:

java

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class CaptchaDownloader {

public static void downloadCaptcha(String url, String savePath) {
    try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            try (InputStream inputStream = entity.getContent();
                 FileOutputStream outputStream = new FileOutputStream(savePath)) {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }
                System.out.println("验证码图片已保存为 " + savePath);
            }
        }
        EntityUtils.consume(entity);
    } catch (IOException e) {
        System.err.println("下载失败: " + e.getMessage());
    }
}

}
3. 图像处理和 OCR 识别
使用 Tesseract 进行 OCR 识别。首先,处理图像并识别验证码:

java

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class CaptchaRecognizer {

public static String recognizeCaptcha(String imagePath) {
    Tesseract tesseract = new Tesseract();
    tesseract.setDatapath("tessdata"); // 设置 Tesseract 数据路径
    tesseract.setLanguage("eng"); // 设置识别语言

    try {
        BufferedImage image = ImageIO.read(new File(imagePath));
        String result = tesseract.doOCR(image);
        System.out.println("识别结果: " + result);
        return result.trim();
    } catch (TesseractException | IOException e) {
        System.err.println("识别失败: " + e.getMessage());
        return null;
    }
}

}
4. 自动化登录
最后,使用 HttpClient 发送 POST 请求,模拟登录操作,并传递用户名、密码和识别出的验证码:

java

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Login {

public static void login(String username, String password, String captcha) {
    String url = "https://captcha7.scrape.center/login";
    try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
        HttpPost post = new HttpPost(url);
        post.setHeader("Content-Type", "application/json");
        String json = String.format("{\"username\":\"%s\", \"password\":\"%s\", \"captcha\":\"%s\"}", username, password, captcha);
        post.setEntity(new StringEntity(json));

        CloseableHttpResponse response = httpClient.execute(post);
        if (response.getStatusLine().getStatusCode() == 200) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败: " + response.getStatusLine().getStatusCode());
        }
    } catch (IOException e) {
        System.err.println("登录过程中出现错误: " + e.getMessage());
    }
}

}更多内容联系1436423940
5. 主程序
整合上述代码,创建主程序:

java

public class Main {
public static void main(String[] args) {
String captchaUrl = "https://captcha7.scrape.center/captcha.png";
String captchaPath = "captcha.png";
String processedCaptchaPath = "captcha_processed.png";

    // 下载验证码
    CaptchaDownloader.downloadCaptcha(captchaUrl, captchaPath);

    // 识别验证码
    String captchaText = CaptchaRecognizer.recognizeCaptcha(captchaPath);

    // 登录
    if (captchaText != null) {
        Login.login("admin", "admin", captchaText);
    }
}

}

标签:Java,String,登录,java,http,验证码,org,apache,import
From: https://www.cnblogs.com/ocr1/p/18475566

相关文章

  • 使用 Python 实现验证码识别与自动化登录
    安装所需依赖首先,确保你已经安装了Python。然后,可以使用pip安装所需的库:bashpipinstallrequestspillowpytesseract确保你也安装了TesseractOCR。可以从TesseractGitHub获取安装指南。下载验证码图片使用requests库下载验证码图片并保存到本地:pythonimpo......
  • Java Spring详解 -- 看完超越99%的同行
    Spring的核心功能IOC(控制反转,依赖注入),AOP(面向切面的编程)IOC:我们在使用过程中不用关注于对象是怎么创建的,只用应用过去,sping自动帮我们完成注入,对象的创建,spring默认创建对象是单例,这样减少了频繁创建对象,让对象重复利用,所有的对象都是放在BeanFactory工厂的AOP:面向切面的编程,......
  • Java 实战虚拟机 进阶 (一 万字)
    实战Java虚拟机-高级篇什么是GraalVMGraalVM是Oracle官方推出的一款**高性能JDK,**使用它享受比OpenJDK或者OracleJDK更好的性能。GraalVM的官方网址:https://www.graalvm.org/官方标语:Buildfaster,smaller,leanerapplications.更低的CPU、内存使用率......
  • Java 初学 day15
    java151、CollectionsCollections:是java针对集合操作专门提供的一个工具类静态方法publicstatic<T>voidsort(List<T>list)publicstatic<T>intbinarySearch(List<?>list,Tkey)publicstatic<T>Tmax(Collection<?>coll)publicstaticvoi......
  • 基于Java大数据背景下求职信息的推荐系统设计与实现
    基于Java大数据背景下求职信息的推荐系统设计与实现计算机毕业设计案例基于Java的食谱/菜谱管理系统基于Java的老年人健康管理系统基于Java的课程评价系统基于微信小程序的充电桩管理系统基于ASP.NET的OA系统基于PHP的在线学习网基于Java的老年人健康管理系统基于S......
  • 使用AES 128位加解密,加解密模式采用CBC,填充模式采用PKCS5Padding的Java工具方法示例
    importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.util.Base64;publicclassAESUtils{privatestaticfinalStringAES_ALGORITHM="AES/CBC/PKCS5Padding";private......
  • java_day17_JDBC、登录注册修改案例
    一、JDBCJDBC编写六步走:1、注册驱动,告诉java程序我们要链接什么数据库【mysql为案例】5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】2、创建与数据库的链接对象......
  • 【Java系列】基于SSM框架的房屋中介服务平台设计与实现(源码+文档+部署讲解等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • java中的类型转换
    一、自动类型转换1.在java中,变量参与运算的时候会自动提升数据类型byte,short,char->int->long->float->double二、强制类型转换1.语句格式:目标数据类型变量名=(目标数据类型)要转型的变量值或者表达式publicclassDataTypeDemo2{publicstaticvoidmain(Str......
  • 【Java系列】基于Javaweb的在线餐饮管理系统设计与实现(源码+文档+部署讲解等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......