Robot键盘控制输入工具类

1 篇文章 0 订阅
1 篇文章 0 订阅

最近在使用Selenium做自动登录的时候

发现网站使用了密码输入框控件,导致使用 sendKeys() 方法无法输入密码

后来找到 Robot 类,通过控制键盘输入来输入密码

这时,密码是可以输入了

但是,用起来跟不方便。要把密码一个字母一个字母的拼起来才能输入

所以我特意做了一个工具类,来帮助输入

import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 键盘输入工具类,不支持中文以及中文输入法状态下的符号
 */
public class RobotUtil {

    private static List<String> LETTER_NUMBER_LIST=null;
    private static List<String> BIG_SYMBOL=null;
    private static List<String> SMALL_SYMBOL=null;
    private static Robot robot=null;

    RobotUtil(){
        try {
            robot=new Robot();
            LETTER_NUMBER_LIST=new ArrayList<>();
            BIG_SYMBOL=new ArrayList<>();
            SMALL_SYMBOL=new ArrayList<>();
            Collections.addAll(LETTER_NUMBER_LIST,
                    "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                    "0","1","2","3","4","5","6","7","8","9",
                    "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
            Collections.addAll(BIG_SYMBOL,"~","!","@","#","$","%","^","&","*","(",")","_","+","{","}","|",":","\"","<",">","?");
            Collections.addAll(SMALL_SYMBOL,"`","-","=","[","]","\\",";","\'",",",".","/");
        } catch (AWTException e) {
            e.printStackTrace();
        }
    }

    public static void inputKeys(String src){
        int length=src.length();
        for(int i=0;i<length;i++){
            char c = src.charAt(i);
            String s=String.valueOf(c);
            if(LETTER_NUMBER_LIST.contains(s)){
                writeString(c);
            }
            if(BIG_SYMBOL.contains(s)){
                big_symbol_writeString(s);
            }
            if(SMALL_SYMBOL.contains(s)){
                small_symbol_writestring(s);
            }
        }
    }

    //字母数字输入
    private static void writeString(char c) {
            if (Character.isUpperCase(c)) {
                robot.keyPress(KeyEvent.VK_SHIFT);
            }
            robot.keyPress(Character.toUpperCase(c));
            robot.keyRelease(Character.toUpperCase(c));
            if (Character.isUpperCase(c)) {
                robot.keyRelease(KeyEvent.VK_SHIFT);
            }
        robot.delay(100);
    }

    //大写符号输入
    private static void big_symbol_writeString(String s) {
        robot.keyPress(KeyEvent.VK_SHIFT);
        if(s.equals("~")) robot.keyPress(KeyEvent.VK_BACK_QUOTE);robot.keyRelease(KeyEvent.VK_BACK_QUOTE);
        if(s.equals("!")) robot.keyPress(KeyEvent.VK_1);robot.keyRelease(KeyEvent.VK_1);
        if(s.equals("@")) robot.keyPress(KeyEvent.VK_2);robot.keyRelease(KeyEvent.VK_2);
        if(s.equals("#")) robot.keyPress(KeyEvent.VK_3);robot.keyRelease(KeyEvent.VK_3);
        if(s.equals("$")) robot.keyPress(KeyEvent.VK_4);robot.keyRelease(KeyEvent.VK_4);
        if(s.equals("%")) robot.keyPress(KeyEvent.VK_5);robot.keyRelease(KeyEvent.VK_5);
        if(s.equals("^")) robot.keyPress(KeyEvent.VK_6);robot.keyRelease(KeyEvent.VK_6);
        if(s.equals("&")) robot.keyPress(KeyEvent.VK_7);robot.keyRelease(KeyEvent.VK_7);
        if(s.equals("*")) robot.keyPress(KeyEvent.VK_8);robot.keyRelease(KeyEvent.VK_8);
        if(s.equals("(")) robot.keyPress(KeyEvent.VK_9);robot.keyRelease(KeyEvent.VK_9);
        if(s.equals(")")) robot.keyPress(KeyEvent.VK_0);robot.keyRelease(KeyEvent.VK_0);
        if(s.equals("_")) robot.keyPress(KeyEvent.VK_MINUS);robot.keyRelease(KeyEvent.VK_MINUS);
        if(s.equals("+")) robot.keyPress(KeyEvent.VK_EQUALS);robot.keyRelease(KeyEvent.VK_EQUALS);
        if(s.equals("{")) robot.keyPress(KeyEvent.VK_OPEN_BRACKET);robot.keyRelease(KeyEvent.VK_OPEN_BRACKET);
        if(s.equals("}")) robot.keyPress(KeyEvent.VK_CLOSE_BRACKET);robot.keyRelease(KeyEvent.VK_CLOSE_BRACKET);
        if(s.equals("|")) robot.keyPress(KeyEvent.VK_BACK_SLASH);robot.keyRelease(KeyEvent.VK_BACK_SLASH);
        if(s.equals(":")) robot.keyPress(KeyEvent.VK_SEMICOLON);robot.keyRelease(KeyEvent.VK_SEMICOLON);
        if(s.equals("\"")) robot.keyPress(KeyEvent.VK_QUOTE);robot.keyRelease(KeyEvent.VK_QUOTE);
        if(s.equals("<")) robot.keyPress(KeyEvent.VK_COMMA);robot.keyRelease(KeyEvent.VK_COMMA);
        if(s.equals(">")) robot.keyPress(KeyEvent.VK_PERIOD);robot.keyRelease(KeyEvent.VK_PERIOD);
        if(s.equals("?")) robot.keyPress(KeyEvent.VK_SLASH);robot.keyRelease(KeyEvent.VK_SLASH);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        robot.delay(100);
    }


    //小写符号输入
    private static void small_symbol_writestring(String s) {
        if(s.equals("`")) robot.keyPress(KeyEvent.VK_BACK_QUOTE);robot.keyRelease(KeyEvent.VK_BACK_QUOTE);
        if(s.equals("-")) robot.keyPress(KeyEvent.VK_MINUS);robot.keyRelease(KeyEvent.VK_MINUS);
        if(s.equals("=")) robot.keyPress(KeyEvent.VK_EQUALS);robot.keyRelease(KeyEvent.VK_EQUALS);
        if(s.equals("[")) robot.keyPress(KeyEvent.VK_OPEN_BRACKET);robot.keyRelease(KeyEvent.VK_OPEN_BRACKET);
        if(s.equals("]")) robot.keyPress(KeyEvent.VK_CLOSE_BRACKET);robot.keyRelease(KeyEvent.VK_CLOSE_BRACKET);
        if(s.equals("\\")) robot.keyPress(KeyEvent.VK_BACK_SLASH);robot.keyRelease(KeyEvent.VK_BACK_SLASH);
        if(s.equals(";")) robot.keyPress(KeyEvent.VK_SEMICOLON);robot.keyRelease(KeyEvent.VK_SEMICOLON);
        if(s.equals("'")) robot.keyPress(KeyEvent.VK_QUOTE);robot.keyRelease(KeyEvent.VK_QUOTE);
        if(s.equals(",")) robot.keyPress(KeyEvent.VK_COMMA);robot.keyRelease(KeyEvent.VK_COMMA);
        if(s.equals(".")) robot.keyPress(KeyEvent.VK_PERIOD);robot.keyRelease(KeyEvent.VK_PERIOD);
        if(s.equals("/")) robot.keyPress(KeyEvent.VK_SLASH);robot.keyRelease(KeyEvent.VK_SLASH);
        robot.delay(100);
    }
    public static void main(String[] args) {
        RobotUtil robotUtil=new RobotUtil();
        robotUtil.inputKeys("abcdABCD123@<>\\;?");
    }
}

做得比较简单

不支持中文!!!!!!!
不支持中文输入法下的符号!!!!!!

只是简单处理一下密码一般有可能输入所需要的按键处理,支持数字、大小写字母、以及一些常用符号

只需要传入个字符串就行了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值