使用htmlunit的好处有两点,相比httpclient,htmlunit是对浏览器的模拟,比如你定位一个按钮,就可以执行click()方法,此外不需要象在httpclient中一样编写复杂的代码,如一堆request header还有一大堆请求参数,你只需要填写用户名,密码,验证码即可,就象在使用一个没有界面的浏览器,当然更重要的是htmlunit对js的支持设置极其简单

1.添加maven的htmlunit(标红)依赖

1

2

3 junit

4 junit

5 ${junit.version}

6 test

7

8

9 com.alibaba

10 fastjson

11 1.2.47

12

13

14 org.jsoup

15 jsoup

16 1.11.3

17

18

19 net.sourceforge.htmlunit

20 htmlunit

21 2.18

22

23

24

2.思路

定位用户名,密码,验证码框等元素,填写即可,验证码可以先把图片下载下来然后手动输入,也可以使用tess4j进行图片识别,这里是手动输入测试的网站,是一个伪ajaxsubmit,测试多次发现需要二次输入验证码才能正确登录,但令人疑惑的是两次生成的验证码一样(如果不一样说明你第一次输入错误)

1 public static void main(String[] args) throwsException {2 WebClient webClient = newWebClient(BrowserVersion.CHROME);3 webClient.getOptions().setJavaScriptEnabled(true);4 webClient.getOptions().setCssEnabled(true);5 webClient.getOptions().setThrowExceptionOnScriptError(false);6 //webClient.getOptions().setThrowExceptionOnFailingStatusCode(true);

7 webClient.getOptions().setActiveXNative(false);8

9

10 //ajax

11 webClient.setAjaxController(newNicelyResynchronizingAjaxController());12 webClient.getOptions().setUseInsecureSSL(false);13

14

15 //允许重定向

16 webClient.getOptions().setRedirectEnabled(true);17

18

19 //连接超时

20 webClient.getOptions().setTimeout(5000);21

22 //js执行超时

23 webClient.setJavaScriptTimeout(10000*3);24

25 //对于此网站务必开启

26 webClient.getCookieManager().setCookiesEnabled(true);27

28 String url = "https://www.zuhaowan.com/login/";29 HtmlPage page =webClient.getPage(url);30 webClient.waitForBackgroundJavaScript(5000);31

32

33

34

35 HtmlPage newPage =readyPage(page, webClient);36 //String content1 = newPage.asXml();37 //IOUtils.write(content1.getBytes(),new FileWriter(new File("f:/content1.txt")));38

39 //如果页面url没有变化重新进行一次登录

40 if(newPage.getUrl().toString().equals(url)) {41 System.out.println("出现错误请重新登录-------------");42 HtmlPage result =readyPage(newPage,webClient);43 System.out.println("url----------------"+result.getUrl());44 System.out.println("页面----" +result.asXml());45 //IOUtils.write(result.asXml(),new FileWriter(new File("f:/content2.txt")));

46

47 }48

49 webClient.close();50 }51

52

53

54 public static HtmlPage readyPage(HtmlPage page,WebClient webClient) throwsException {55 //封装页面元素

56 HtmlForm form = page.getHtmlElementById("form2");57 HtmlTextInput loginname = form.getInputByName("loginname");58 loginname.setValueAttribute("用户名");59 HtmlPasswordInput loginpwd = form.getInputByName("loginpwd");60 loginpwd.setValueAttribute("密码");61

62 //验证码输入框

63 HtmlTextInput verify_code = form.getInputByName("verify_code");64

65 //验证码图片

66 HtmlImage verify_img = (HtmlImage) page.getElementById("verify_img");67 UUID randomUUID =UUID.randomUUID();68 //保存

69 verify_img.saveAs(new File("./src/main/resources/image/verifyimg"+ randomUUID.toString() +".png"));70

71 System.out.println("验证码图片已保存!");72 System.out.println("请输入验证码");73 //手动输入验证码

74 Scanner scanner = newScanner(System.in);75 String code =scanner.nextLine();76 System.out.println("验证码-------------" +code);77 verify_code.setValueAttribute(code);78

79

80 //登录按钮也可以使用page.executeJavaScript("javascript:document.getElementById(\'loginsubmit\').click()").getNewPage();

81 HtmlAnchor login = page.getHtmlElementById("loginsubmit");82 HtmlPage newPage =login.click();83

84 //等待js加载

85 webClient.waitForBackgroundJavaScript(5000);86 returnnewPage;87

88 }89

3.控制台部分输出截图

html手机验证码登录页面代码,htmlunit 模拟登录 数字验证码(示例代码)相关推荐

  1. HttpClient模拟登录、HtmlUnit模拟登录,jsoup爬取登录后的内容(不带验证码)

    一.HttpClient模拟登录是通过post或get请求,登录后抓取的是静态页面,动态页面使用HtmlUnit public static void main(String[] args) thro ...

  2. Java学习day3——Javaweb登录页面设计(1)(含JSP代码)

    写在前面 本文主要的内容是完成网页登录页面设计,以及判断用户名密码是否正确,如果正确,进入下一页面,并输出sessionID,若错误,则在登录页面给出用户名或密码错误提示,并在登录页面显示访问次数. ...

  3. python模拟qq空间登录_模拟登录系列 | QQ空间模拟登录

    原文链接模拟登录系列 | QQ空间模拟登录​mp.weixin.qq.com 本系列所有代码均在这CharlesPikachu/DecryptLogin​github.com 原理简介 这里,我们简单 ...

  4. 用php mui ajax注册登录页面,ajax实现简单登录页面

    本文实例为大家分享了ajax实现简单登录页面的具体代码,供大家参考,具体内容如下 一.什么是ajax Ajax是一种无需重新加载整个网页,能够更新部分网页的技术. 二.ajax的工作原理 Ajax工作 ...

  5. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  6. python post 请求登录后的页面_python - 学习模拟登录,卡在发送POST请求之后?

    问 题 学习模拟登录,发送了post请求之后页面还是登录页面啊,不知道原因 import re import requests url='http://cer.imufe.edu.cn/authser ...

  7. htmlunit模拟登录

    htmlunit jar项目路径http://sourceforge.net/projects/htmlunit/files/htmlunit/ demo代码如下 public class AutoL ...

  8. python抢课脚本 验证码_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  9. 12-基于selenium实现12306模拟登录,及京东登录滑动缺口验证模拟登录

    流程分析: 使用selenium打开登录页面 对当前selenium打开的这张页面进行截图 对当前图片的局部区域(验证码图片区域)进行截图 这样验证码图片和模拟登录进行所显示的图片一一对应(如果我们对 ...

  10. python多次登录教务系统_python3模拟登录正方教务系统

    刚学了大概两周的python ,顺便搞了下爬虫.试着用python模拟登录学校的教务系统. 看了个教程,附上链接 参照教程做了一下,发现系统经过一些变动,原教程还有很多可以改进的地方 准备工作 先来看 ...

最新文章

  1. javascript之ua与urlSchema
  2. u-boot_NAND_Flash操作命令及烧录Linux内核和文件系统
  3. 好程序员应该拥有的7个特质
  4. python输入end退出循环_4.学习python获取用户输入和while循环及if判断语句
  5. 终于记住回车和换行cr lf的来由和含义了 -参考: http://www.cnblogs.com/me115/archive/2011/04/27/2030762.html...
  6. myeclipse的优化
  7. Tomcat配置HTTPS
  8. js方法实现rgb颜色转换成16进制格式的代码的方法
  9. 终面后拿offer几率_战绩 | 恭喜VIP学员斩获德勤(北京)风险分析师全职Offer!...
  10. Go github.com/e421083458/golang_common/lib
  11. ad怎么测量pcb尺寸_如何用AD精确测量PCB板子尺寸
  12. awesomes前端资源库网站
  13. 微信更新,干掉手机输入法
  14. t检验自由度的意义_在统计中自由度是什么?
  15. 嵌入式Linux开发环境搭建-4-嵌入式编程基础知识
  16. 干货 | Elasticsearch 检索类型选型指南
  17. NVIDIA主控CPU/GPU设置频率
  18. 32位CPU最大支持4G内存
  19. 通过OpenWrt路由器实现王者荣耀、快手、抖音过滤
  20. Android命令行测试BT WiFi Sensor工作状态

热门文章

  1. C罗111球成国家队历史射手王,破纪录的动力来自签约曼联
  2. Python系列之:Dash从入门到精通系列一
  3. 解释杨中科随机数为什么会骗人?
  4. 百度云盘卸载不干净如何处理
  5. 余数计算方法及其使用方法
  6. vim命令失效了怎么办
  7. html生物代码,方舟生存进化全生物代码
  8. c11语言编译器,GNU C编译器的gnu11和c11
  9. 2021年考研经验分享(初试408分)
  10. 机器学习极好的入门学习视频推荐