我这纯属工作需求,绝对不是干非法的事,暂时还没有这个能力,呵呵!没有高手指点吗?
我现在的思路是:让程序执行一半终止,通过返回登陆页面的html源码去查找验证码,然后手动输入验证码,然后程序继续执行。
不知道我的思路可行否,如果可行请高手给予指点,应该怎样才能让程序执行一半时停止?

解决方案 »

  1.   

    我遇到的问题是先需要把验证码拿回去,放到客户端,等待用户输入用户名,密码,然后我传入用户名和密码,验证码,还有sissionId,这个sessionId是在获取验证码的时候拿到的,但是不知道为什么,居然也是验证码错误。。  楼上的问题: 如果你只是想实现登录进去,可以借助Swing ,将验证码图片显示在你的屏幕上,然后给一个参数,输入验证码,再让程序继续就行。网上有很多的。
      

  2.   


    正解  先save到本地 然后找到验证码图片摆到输入界面上  今天下午正好在做这个
      

  3.   

    htmlunit爬取网页没弄过,用过jsoup抓取过验证码。不知道对你有帮助没。
    String image ="";
    String code = "";
    try {
    URL connect = new URL("http://60.190.2.101/web/ValidateCode.aspx?type=ValidateCodeCMCX&t=2012/11/23");
                URLConnection connection = connect.openConnection();
                connection.setDoOutput(true);
                

    InputStream input = connection.getInputStream();
    Map<String, List<String>> headerMap = connection.getHeaderFields();
    if(headerMap != null && headerMap.containsKey("Set-Cookie")) {
    //content.setHttpHeadMap(headerMap);
    for(String tmp: headerMap.get("Set-Cookie")){
    if(tmp.indexOf("ASP.NET_SessionId") != -1){
    out.println(tmp.split(";")[0].split("=")[1]);
    code = tmp.split(";")[0].split("=")[1];
    }
    }
    }

    image = request.getSession().getServletContext().getRealPath("")+"/wap/hw/peace/code/image.jpg";
        File file = new File(image);
       
       //创建一个输出流
       OutputStream out1 = new BufferedOutputStream(new FileOutputStream(file));
             //每次的写入大小为:
       int length=1024*1024;
       byte[] a = new  byte[length];

    //如果大小大于length继续循环,否则值为-1
       while((length=input.read(a))>0){
        out1.write(a, 0, length);
       }

    //别忘了关闭流
       input.close();
       out1.close();
            } catch(Exception e){
            out.println(e.getMessage());
            }finally {
            
            }


    Connection conn=Jsoup.connect("http://60.190.2.101/web/SearchNameForm.aspx");
    Connection conn1 = Jsoup.connect("http://60.190.2.101/web/ValidateCode.aspx?type=ValidateCodeCMCX&t=2012/11/23");
    Document doc =conn.ignoreContentType(true).get();
      

  4.   


    正解  先save到本地 然后找到验证码图片摆到输入界面上  今天下午正好在做这个第一步获取验证码是一个 webclient,第二部展示到客户端界面,用户输入,这个时候你的webclient应该是已经关闭了,那么第三步传入验证码,还有用户信息再用一个webclient,就登陆不上去了,这个就是其实验证码请求了两次的问题,请问你是怎么解决的呢
      

  5.   

    楼主不知道你的问题 解决了没有,我现在也正琢磨着呢,我是一个webclient依次访问两个地址,一个是网页,网页通过一个Servlet获取验证码图片,另一个应该是服务器验证的代码,我现在是访问第一个页面下载验证码图片到本地,然后把手动输入后再用这个webclient提交给服务器,这两次应该不会获取两次验证码吧,而且我看过验证码的图片并没有变,可是还是提示验证码错误。