日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html手机验证码登录页面代码,htmlunit 模拟登录 数字验证码(示例代码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用htmlunit的好處有兩點(diǎn),相比httpclient,htmlunit是對(duì)瀏覽器的模擬,比如你定位一個(gè)按鈕,就可以執(zhí)行click()方法,此外不需要象在httpclient中一樣編寫(xiě)復(fù)雜的代碼,如一堆request header還有一大堆請(qǐng)求參數(shù),你只需要填寫(xiě)用戶(hù)名,密碼,驗(yàn)證碼即可,就象在使用一個(gè)沒(méi)有界面的瀏覽器,當(dāng)然更重要的是htmlunit對(duì)js的支持設(shè)置極其簡(jiǎn)單

1.添加maven的htmlunit(標(biāo)紅)依賴(lài)

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.思路

定位用戶(hù)名,密碼,驗(yàn)證碼框等元素,填寫(xiě)即可,驗(yàn)證碼可以先把圖片下載下來(lái)然后手動(dòng)輸入,也可以使用tess4j進(jìn)行圖片識(shí)別,這里是手動(dòng)輸入測(cè)試的網(wǎng)站,是一個(gè)偽ajaxsubmit,測(cè)試多次發(fā)現(xiàn)需要二次輸入驗(yàn)證碼才能正確登錄,但令人疑惑的是兩次生成的驗(yàn)證碼一樣(如果不一樣說(shuō)明你第一次輸入錯(cuò)誤)

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 //連接超時(shí)

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

22 //js執(zhí)行超時(shí)

23 webClient.setJavaScriptTimeout(10000*3);24

25 //對(duì)于此網(wǎng)站務(wù)必開(kāi)啟

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 //如果頁(yè)面url沒(méi)有變化重新進(jìn)行一次登錄

40 if(newPage.getUrl().toString().equals(url)) {41 System.out.println("出現(xiàn)錯(cuò)誤請(qǐng)重新登錄-------------");42 HtmlPage result =readyPage(newPage,webClient);43 System.out.println("url----------------"+result.getUrl());44 System.out.println("頁(yè)面----" +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 //封裝頁(yè)面元素

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

62 //驗(yàn)證碼輸入框

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

65 //驗(yàn)證碼圖片

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("驗(yàn)證碼圖片已保存!");72 System.out.println("請(qǐng)輸入驗(yàn)證碼");73 //手動(dòng)輸入驗(yàn)證碼

74 Scanner scanner = newScanner(System.in);75 String code =scanner.nextLine();76 System.out.println("驗(yàn)證碼-------------" +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.控制臺(tái)部分輸出截圖

總結(jié)

以上是生活随笔為你收集整理的html手机验证码登录页面代码,htmlunit 模拟登录 数字验证码(示例代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。