问题描述
我用htmlunit做一个网站模拟登陆程序,但是,遇到有需要输入验证码的就登陆不上去了,请问怎么获得验证码,然后和用户名、密码一块post。提示:有的网页不需要验证码的,我试过可以登陆上去
解决方案
解决方案二:
据我所知,验证码就是防机器人的坐等高人出现。。
解决方案三:
我这纯属工作需求,绝对不是干非法的事,暂时还没有这个能力,呵呵!没有高手指点吗?我现在的思路是:让程序执行一半终止,通过返回登陆页面的html源码去查找验证码,然后手动输入验证码,然后程序继续执行。不知道我的思路可行否,如果可行请高手给予指点,应该怎样才能让程序执行一半时停止?
解决方案四:
我也遇到这样的问题。。坐等
解决方案五:
我遇到的问题是先需要把验证码拿回去,放到客户端,等待用户输入用户名,密码,然后我传入用户名和密码,验证码,还有sissionId,这个sessionId是在获取验证码的时候拿到的,但是不知道为什么,居然也是验证码错误。。楼上的问题:如果你只是想实现登录进去,可以借助Swing,将验证码图片显示在你的屏幕上,然后给一个参数,输入验证码,再让程序继续就行。网上有很多的。
解决方案六:
先用模拟浏览器获取到验证码图片,并在界面上显示出来。然后在界面上输入用户名、密码、验证码,然后用获取验证码的模拟浏览器发送登录请求,应该是可以能成功登录的。
解决方案七:
引用5楼wangcomputer2010的回复:
先用模拟浏览器获取到验证码图片,并在界面上显示出来。然后在界面上输入用户名、密码、验证码,然后用获取验证码的模拟浏览器发送登录请求,应该是可以能成功登录的。
正解先save到本地然后找到验证码图片摆到输入界面上今天下午正好在做这个
解决方案八:
之前有人问过相似的问题。验证码的本质就是为了防止机器人这类操作的。现在有专门研究验证码破解算法的。比较简单的方法就是在你一次请求中把验证码保存下来,然后手动输入,最后一起提交你的数据。这样其实和手动输入没什么区别。
解决方案九:
还要注意的是,验证码的请求不能请求第二次,不然你提交就不成功了!
解决方案十:
htmlunit爬取网页没弄过,用过jsoup抓取过验证码。不知道对你有帮助没。Stringimage="";Stringcode="";try{URLconnect=newURL("http://60.190.2.101/web/ValidateCode.aspx?type=ValidateCodeCMCX&t=2012/11/23");URLConnectionconnection=connect.openConnection();connection.setDoOutput(true);InputStreaminput=connection.getInputStream();Map<String,List<String>>headerMap=connection.getHeaderFields();if(headerMap!=null&&headerMap.containsKey("Set-Cookie")){//content.setHttpHeadMap(headerMap);for(Stringtmp: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";Filefile=newFile(image);//创建一个输出流OutputStreamout1=newBufferedOutputStream(newFileOutputStream(file));//每次的写入大小为:intlength=1024*1024;byte[]a=newbyte[length];//如果大小大于length继续循环,否则值为-1while((length=input.read(a))>0){out1.write(a,0,length);}//别忘了关闭流input.close();out1.close();}catch(Exceptione){out.println(e.getMessage());}finally{}Connectionconn=Jsoup.connect("http://60.190.2.101/web/SearchNameForm.aspx");Connectionconn1=Jsoup.connect("http://60.190.2.101/web/ValidateCode.aspx?type=ValidateCodeCMCX&t=2012/11/23");Documentdoc=conn.ignoreContentType(true).get();
解决方案十一:
引用6楼doufugan321的回复:
Quote: 引用5楼wangcomputer2010的回复:
先用模拟浏览器获取到验证码图片,并在界面上显示出来。然后在界面上输入用户名、密码、验证码,然后用获取验证码的模拟浏览器发送登录请求,应该是可以能成功登录的。正解先save到本地然后找到验证码图片摆到输入界面上今天下午正好在做这个
第一步获取验证码是一个webclient,第二部展示到客户端界面,用户输入,这个时候你的webclient应该是已经关闭了,那么第三步传入验证码,还有用户信息再用一个webclient,就登陆不上去了,这个就是其实验证码请求了两次的问题,请问你是怎么解决的呢
解决方案十二:
楼主不知道你的问题解决了没有,我现在也正琢磨着呢,我是一个webclient依次访问两个地址,一个是网页,网页通过一个Servlet获取验证码图片,另一个应该是服务器验证的代码,我现在是访问第一个页面下载验证码图片到本地,然后把手动输入后再用这个webclient提交给服务器,这两次应该不会获取两次验证码吧,而且我看过验证码的图片并没有变,可是还是提示验证码错误。。。。