Android利用爬虫实现模拟登录的实现实例

Android利用爬虫实现模拟登录的实现实例

为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次保存的账号、密码,模拟点击登录按钮。实现过程折腾好几个。

一开始选择的是htmlunit解析登录界面html,在pc上测的能实现,结果在android上运行不起来,因为htmlunit利用了javax中的类实现的解析,android不支持javax,所以就跑不起来。

不过pc还是ok的

实例代码:

package com.yasin; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import org.junit.Test; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; public class AutoLogin { String url = "http://172.16.10.3/"; @Test public void run(){ try{ WebClient webClient = new WebClient(BrowserVersion.CHROME); //htmlunit 对css和javascript的支持不好,所以请关闭之 webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setCssEnabled(false); HtmlPage page = (HtmlPage)webClient.getPage(url); List<HtmlForm> forms = page.getForms(); HtmlForm form = forms.get(0); HtmlTextInput name = form.getInputByName("DDDDD"); name.setValueAttribute("/*填写你的账号*/"); HtmlPasswordInput pass = form.getInputByName("upass"); pass.setValueAttribute("/*你的密码*/"); HtmlSubmitInput ok = form.getInputByName("0MKKey"); System.out.println(pass.toString()); ok.click(); }catch(Exception e){ System.out.println(e.toString()); } } }

于是接着调研,发现利用jsoup可以在android运行起来,不过这个库能抓取网页中的内容,也能进行赋值操作,但不支持模拟点击事件,网上有好多例子,是利用第一次访问获取cookie,然后把账号密码再给Post到服务器,完成模拟登陆。可以我们的校网竟然没有使用cookie,于是我只能抓包看看post的data有什么,然后把data直接通过post发送,不过不知道我们校网密码的加密的方式,所以填写密码需要先去抓包,抓到自己账号的密文,然后放到data中直接发送。成功了!

核心代码:

public void login() throws IOException{ Map<String,String> datas = new HashMap<String,String>(); Connection con = Jsoup.connect("http://172.16.10.3/"); con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");//配置模拟浏览器 Response rs= con.execute();//获取响应 Document doc = Jsoup.parse(rs.body()); datas.put("DDDDD", "/*自己的账号*/"); datas.put("upass", "/*自己密码的密文,需抓包获取*/"); datas.put("R1", "0"); datas.put("R2", "1"); datas.put("0MMKey", "123456"); System.out.println(datas.toString()); Connection con2=Jsoup.connect("http://172.16.10.3/"); con2.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"); //设置cookie和post上面的map数据.cookies(rs.cookies()) Response login=con2.ignoreContentType(true).method(Method.POST).data(datas).execute(); Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); }

抓包方式:

点击登录后快速停止监听,获取form data,然后把data中的值填上就好了。

总的来说,如果只是单纯抓取网页内容android这一块利用jsoup还是能实现的,但不支持按钮的点击操作;Htmlunit API更好用,也能模拟点击事件,不过javax android并不支持,但服务器还是可以用来抓取数据的。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-10-25 09:15:52

Android利用爬虫实现模拟登录的实现实例的相关文章

Android利用ZXing扫描二维码的实例代码解析_Android

相关阅读: Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题 此项目源码地址:请点击这里 看一下zxing的项目结构,我这里直接拿过来用的   看一下扫码的activity: package com.fanyafeng.barcode.activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bund

Android利用ZXing扫描二维码的实例代码解析

相关阅读: Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题 此项目源码地址:请点击这里 看一下zxing的项目结构,我这里直接拿过来用的 看一下扫码的activity: package com.fanyafeng.barcode.activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle

爬虫-python3模拟登录百度贴吧

问题描述 python3模拟登录百度贴吧 python3模拟登录百度贴吧,如题,应该怎么弄呢?我网上搜索看到基本很多都要用到token,具体百度登录需要什么参数不是很清楚.麻烦各位指教下,谢谢了 解决方案 http://www.jb51.net/article/45775.htm 参考下.这种程序也可以通过fddler抓包自己分析. 解决方案二: 需要先用浏览器工具查看一下登陆过程,分析登陆的参数以及各中信息,然后再来模拟构造

求教模拟登录成功后怎么打开新页面?

问题描述 我利用HttpWebRequest类模拟登录对方的网页已经成功了,而且能获取到成功后的跳转页面信息.但是在浏览器中打开跳转页面依旧返回到登陆页..等于现在成功页面只能在Httpwebreque类里面的webresponse里面才能看见..我怎么才能将其呈现在浏览器中呢? 解决方案 解决方案二:快来人回一个,我好结贴给分了!!解决方案三:这个说的有点模糊,没怎么看懂...发送消息到多方的网页,不管是登录成功或者失败,都会返回值根据返回值判断返回成功Response.Redirect("x

ajax-php采集高手进:利用curl模拟登录抓取数据遇到json调用问题不成功,求助!

问题描述 php采集高手进:利用curl模拟登录抓取数据遇到json调用问题不成功,求助! 我在抓取一个页面的信息(假设a.php),这个页面只是一些基本的html框架,其他关键信息是通过ajax请求(b.php)回来的,返回的是json,然后在通过页面js将json解析,绘制到页面上.问题的关键是ajax请求的信息里有个手机号码需要登录后才显示完整,原网站利用ajax请求b.php获得json数据,如果直接访问b.php也是可以直接得到:{"name":"zhangsan&

C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章利用了 HttpWebRequest 和 HttpWebResponse 模拟登录了有验证码的网站. 程序设计的界面很简单,三个TextBox分别输入用户名.密码和验证码,一个Image控件显示从网站请求到的验证码图片,还有两个按钮,一个换验证码,一个登录. 写程序前,先用浏览器的开发者工具观察下登

爬虫-关于新浪微博模拟登录问题

问题描述 关于新浪微博模拟登录问题 求各位大神帮帮忙,我已经获取了cookie,但是我不知道应该怎样访问别人的新浪微博主页,大神能给个建议吗,,,或者是有什么代码能贴出来就更好了,,,,谢谢,我是爬虫新手,正在做爬取新浪微博这方面的,如果能够得到各位大神的指点,我相信我会得到很大进步 解决方案 Python模拟新浪微博登录scrapy模拟登录新浪微博新浪微博模拟登录 java实现 解决方案二: 访问别人的 要先进入自己的 再从相关链接中一层层爬下去吧 解决方案三: 你登录的cookie是否跟你后

Android+struts2+json方式模拟手机登录功能

涉及到的知识点:  1.Struts2框架的搭建(包括Struts2的jSON插件)   2.Android前台访问Web采用HttpClient方式.   3.Android采用JSON的解析. 服务端主要包含一个Action,通过struts的web配置配置struts.xml驱动业务逻辑的执行,然后对于符合条件的登录,返回给客户端通过jsonobject包装的数据. 服务端代码: package com.easyway.json.android;      import java.util

android端http模拟登录某一网站并保存cookie做一些登录后的操作,求帮助

问题描述 android端http模拟登录某一网站并保存cookie做一些登录后的操作,求帮助 我用android端调用某网站的登陆接口,获取他的cookie并且保存下来,之后我定位到这个网站的一篇帖子并写请求去发帖,当然传入我登录时返回的cookie, 可是根据返回的结果查看,并没有登陆上去, 请各位帮我参谋一下 不胜感激 cookies = httpClient.getCookieStore();拿到cookies requestParams.addHeader("Referer"