最近在使用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@<>\\;?");
}
}
做得比较简单
不支持中文!!!!!!!
不支持中文输入法下的符号!!!!!!
只是简单处理一下密码一般有可能输入所需要的按键处理,支持数字、大小写字母、以及一些常用符号
只需要传入个字符串就行了