HtmlUnit的学习与摸索 解决某搜索网站登录验证与submit无法提交的问题

前言

HtmlUnit是一款“虚拟浏览器”,以模拟浏览器的运行来达到爬取数据的目的,与Jsoup有显著区别

问题与实现

现需要爬取某网站数据,但该网站几乎全用ajax提交获取数据,并且对js代码进行了加密,用Jsoup难以爬取,因此用到HtmlUnit。首先可以确定的几点:

1.该网站需要执行ajax
2.网站需要登录
3.网站遵循https协议
因此先有以下代码:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_45);  
		        webClient.getOptions().setJavaScriptEnabled(true);  //开启javascript解释
		        webClient.getOptions().setCssEnabled(false);  //禁用Css,可避免自动二次请求CSS进行渲染     
		        webClient.getOptions().setUseInsecureSSL(true);//忽略ssl认证    
		        webClient.setAjaxController(new NicelyResynchronizingAjaxController());//开启ajax
		        webClient.getCookieManager().setCookiesEnabled(true); //开启cookie管理  

以上开启了基本需求,上面部分设置后面可能不会用到,下面开始着手登录问题,没登录的时候他们的跳页按钮如下


对登录页面进行爬取模拟提交点击事件

String login_url = "https://www.xxx.com/login?redirectUrl=xxxxx";
		        HtmlPage page_login = webClient.getPage(login_url); 
		        HtmlForm  form = page_login.getForms().get(0);//获取form表单
		        
//		       System.out.println(form.asXml());
		       
		        HtmlTextInput name = form.getInputByName("signusername");
		        name.setValueAttribute("xxxxxxx");
		        HtmlPasswordInput password = form.getInputByName("signpassword");
		        password.setValueAttribute("xxxxxxx");
		        HtmlSubmitInput  submit = form.getInputByName("loginsubmit");
		        
		        submit.click();
		        webClient.waitForBackgroundJavaScript(1000);//等待1秒  

随后进入了无限苦恼中,因为页面根本没跳转,还在登录页面,上面填的数据可以输出,于是代码审查,在ajax的代码中发现如下代码


由此代码判断虽然页面没有跳转,但是登录信息应该已经保存,因此直接进行后续代码操作

String url ="同网站搜索页";  
HtmlPage page = webClient.getPage(url);

输出之,发现登录成功,分页跳转链接变成如下代码


继续用htmlunit模拟浏览器点击即可爬取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值