zhangjie_java 2015-08-21 09:42 采纳率: 50%
浏览 2876
已采纳

htmlunit模拟登录 验证码错误

使用htmlunit模拟登录的时候 ,首先穿创建了一个webclient 用webclient请求登录页面,同事请求解析验证码,验证码解析正确,然后开始登录系统,一直提示验证码错误。
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_11);
webClient.getOptions().setJavaScriptEnabled(true);

webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setThrowExceptionOnScriptError(false);

webClient .getOptions().setUseInsecureSSL(true);
WebWindow webWindow = webClient.getCurrentWindow();

    WebRequest request1 = new WebRequest(new URL("http://rd2.zhaopin.com/s/loginmgr/login.asp"));
    HtmlPage htmlPage = webClient.getPage(webWindow,request1);
    String name =  htmlPage.getWebClient().getWebWindows().get(0).getName();
    System.out.println(name);
    //第三步 获取界面元素
    HtmlInput userName = htmlPage.getHtmlElementById("LoginName");
    HtmlInput password = htmlPage.getHtmlElementById("Password");
    HtmlInput checkCode = htmlPage.getHtmlElementById("CheckCode");
    HtmlInput btn = htmlPage.getHtmlElementById("login");


    WebRequest request = new WebRequest(new URL("https://passport.zhaopin.com/checkcode/imgrd"));

    UnexpectedPage imagePage = webClient.getPage(webWindow,request);
    InputStream in =  imagePage.getWebResponse().getContentAsStream();
    File storeFile = new File("D:/zlzp.png");  
    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(storeFile));
    byte[] buf = new byte[2048];  
    int length = in.read(buf);  
    while (length != -1) {  
        output.write(buf, 0, length);  
        length = in.read(buf);  
    }  
    in.close();  
    output.close();  
    String valCode = new OCR().recognizeText(new File("D:\\zlzp.png"), "png");
    System.out.println(valCode);
    userName.setAttribute("value", "");
    password.setAttribute("value", "");
    checkCode.setAttribute("value", valCode);
    HtmlPage page2 = btn.click();
    System.out.println("\n\n\n");
    System.out.println(page2.asText());
  • 写回答

1条回答 默认 最新

  • threenewbee 2015-08-21 10:49
    关注

    用fiddler看下,是不是你请求了多次页面,也就是你识别的验证码不是最终的,或者你没有带上cookie

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧