移动登陆地址:https://sn.ac.10086.cn/login
以下是我的测试代码。 根据元素获取图片保存到本地,然后scanner输入验证码之后模拟提交。但是 如果说 验证码输入的位数不对,还会给我返回 验证码必须为4位
如果按照我下载保存的验证码 去输入没有任何提示了,打印的页面还是 登陆页面。
所以 小弟不知道是因为验证码输入错了。 还是因为这种方法不行?求指教
String phoneNo = "18220834780";
String passwords = "xxx";
String validateCodes = null;
// 5、模拟用户登录
final WebClient webClient = new WebClient();
// 1.获取某个待测页面
final HtmlPage page = webClient.getPage("https://sn.ac.10086.cn/login");
System.out.println(page.getTitleText() + "---------------------");
HtmlForm form = page.getForms().get(0);
HtmlTextInput username = (HtmlTextInput) form.getInputByName("userName");
System.out.println(username);
HtmlPasswordInput password = (HtmlPasswordInput) form.getInputByName("password");
System.out.println(password);
HtmlTextInput verifyCode = (HtmlTextInput) form.getInputByName("verifyCode");
username.setValueAttribute(phoneNo);
password.setValueAttribute(passwords);
DomNodeList<DomNode> iList = page.querySelectorAll(".loginPageBtn2013");
HtmlImage valiCodeImg = (HtmlImage) page.getElementById("verifyImg");
ImageReader imageReader = valiCodeImg.getImageReader();
BufferedImage bufferedImage = imageReader.read(0);
BufferedImage inputbig = new BufferedImage(256, 256, BufferedImage.TYPE_INT_BGR);
Graphics2D g = (Graphics2D) inputbig.getGraphics();
g.drawImage(bufferedImage, 0, 0, 100, 100, null); // 画图
g.dispose();
inputbig.flush();
File file2 = new File("e:/"); // 此目录保存缩小后的关键图
if (file2.exists()) {
System.out.println("多级目录已经存在不需要创建!!");
} else {
// 如果要创建的多级目录不存在才需要创建。
file2.mkdirs();
}
String name = "asasdas.png";
String fname = name.substring(0, name.lastIndexOf("."));// 新名字
ImageIO.write(inputbig, "jpg", new File("e:/" + fname + ".jpg")); // 将其保存在C:/imageSort/targetPIC/下
System.out.println("请输入验证码");
Scanner scanner = new Scanner(System.in);
verifyCode.setValueAttribute(scanner.next());
HtmlPage retPage = ((DomElement) iList.get(0)).click();
System.out.println(retPage.asXml());