知识点
相关文章
更多最近更新
更多微信的模拟登陆及获取好友列表
2019-03-02 00:06|来源: 网路
最近没事写了个微信模拟登陆的代码,测试可以到今天2013年11月4日为止是可以登陆的
登陆是用的jsoup实现的,一个简单又强大的工具。不懂的可以@红薯站长去
Connection.Response response = Jsoup.connect("https://mp.weixin.qq.com/")
.userAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0").method(Connection.Method.GET).timeout(0)
.execute();
response = Jsoup.connect("https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN").ignoreContentType(true)
.userAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0")
.referrer("https://mp.weixin.qq.com/")
.data("username", username)
.data("pwd", DigestUtils.md5Hex(password))
.data("f", "json")
.data("imgcode", "")
.cookies(response.cookies())
.method(Connection.Method.POST)
.execute();
System.out.println(response.body());
cookies=response.cookies();//保存,以后得用
这里返回的结果里面ErrMsg里面的地址很重要,它就是返回的302状态要重定向的地址。最重要的是里面包含了一个token.所以要保存一下
TOKEN = getQueryParam(homePage).get("token");
getQueryParam方法我就不贴出来了,非常简单,你可以用现在的httpclient,jetty或者tomcat里面的类实现,也可以自己写一个字符串处理的,方法很多,但是目的只有一个,我想要得到token的值。因为以后的url都要加上它。
登陆之后当然是获取好友列表了,我把前面的cookie用一个变量cookies保存起来了。下面用一下
List<WeixinUser> userList=new ArrayList<WeixinUser>();
String FANS_URL = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&token="
+ TOKEN + "&lang=zh_CN&pagesize=10&pageidx=0&type=0&groupid=0";
WebClient wc = new WebClient();
wc.getBrowserVersion().setUserAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0");
wc.addRequestHeader("Referer", "https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/index&action=index&token=" + TOKEN + "&lang=zh_CN");
wc.getOptions().setJavaScriptEnabled(true);
wc.getOptions().setCssEnabled(true);
wc.setJavaScriptEngine(new JavaScriptEngine(wc));
wc.getOptions().setThrowExceptionOnScriptError(false);
wc.getOptions().setTimeout(60000);
CookieManager cm = new CookieManager();
cm.setCookiesEnabled(true);
for (Map.Entry<String, String> cookie : this.cookies.entrySet()) {
Cookie c = new Cookie("mp.weixin.qq.com", cookie.getKey(), cookie.getValue());
cm.addCookie(c);
}
wc.setCookieManager(cm);
HtmlPage page = wc.getPage(FANS_URL);
Document document = Jsoup.parse(page.asXml());
Element elem = document.getElementById("userGroups");
Elements items = elem.getElementsByAttributeValueContaining("class", "user_info");
for (Element item : items) {
WeixinUser user = new WeixinUser();
Element child=item.select("a[data-fakeid][class*=remark_name]").first();
user.setFakeId(child.attr("data-fakeid"));
user.setRemarkName(child.text());
userList.add(user);
}
return userList;
为什么这里又用htmlunit了呢?因为腾讯实在是太贱了,用户列表那里通过js输出的,所以你得让它的js运行,然后拿结果。OK 到了这里剩下的事你想要做什么就看你的了。
还有一点,不要用低版本的jdk 至少是1.6_45的,因为这个SSLFactory的实现有了些变化,1.6.10的就不行。sun包里的东西 经常换,难怪sun对外声名不要在自己的程序中直接引用sun.xxxx的包,因为你不知道你用的那个类在下个版本中是什么样,甚至还有没有都不确定。
转自:http://my.oschina.net/u/997546/blog/174625
相关问答
更多-
用vb.net二次开发,利用计算机端微信给好友发文字信息?[2024-03-05]
模拟按键 sendkey函数 -
新浪微博登陆计算机版[2023-09-24]
登陆新浪微博页面,有个微博登陆框,然后输入你的微博账号和密码就可以登陆新浪微博了。 -
微信官网登陆[2022-06-03]
1、首先需要打开网页版微信官方网址:https://wx.qq.com/,会出现以下这个网页版微信二维码; 2、然后打开手机微信,开启二维码扫描(这个功能在微信界面的“朋友们---添加朋友---扫一扫”); 3、扫描网页版微信二维码,这个二维码只有在https://wx.qq.com/网页上扫描才有用,扫描成功后网页上会出现ok,手机上会有确认信息,需要手动确定; 4、在手机客户端点击确认后,在手机微信里会显示出正在使用微信网页版字样; 5、直接点击确认网页版正常登陆而且无须输入账号密码。 -
微信怎么只在计算机登陆[2022-03-25]
目前微信并没有电脑端强制手机端下线的功能。 只能手机先扫码登录电脑端,手机端再自己退出。 -
java(jsp) 微信扫描二维码登陆网页[2022-04-26]
使用OAuth2.0引导用户跳转到redirect_uri的地址,跳转的时候会带上一个参数code,拿这个code调用 接口/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF -
手机java微信怎么登陆[2021-11-13]
JAVA手机不能使用微信。微信只支持symbian和android等智能系统手机。 微信支持多种语言,支持Wi-Fi无线局域网、2G,3G和4G移动数据网络,iOS版,Android版、Windows Phone版、Blackberry版、诺基亚S40版、S60V3和S60V5版。微信的最新版本:5.2.1(Android)、5.2.0.17(iOS)、4.2(Symbian)、5.1.0.0(Windows Phone 8)、1.5(诺基亚S40)、3.0(BlackBerry)、2.0(BlackBer ... -
手机登陆微信出现400 bad request[2022-09-25]
手机登陆微信出现400 bad request的话:建议进行以下操作: 1.检查手机网络连接是否稳定,建议更换无线网络尝试。 2.更新软件版本尝试。 3.点击手机应用程序-设定-应用程序管理器-已下载-选择出现问题的应用-清除数据 4.将数据备份(联系人,短信,图片等),恢复出厂设置重新安装尝试 5.更新下手机系统版本。 -
python爬取微信好友运动步数[2022-05-22]
微信分享的url本身就有openid,伪造Request Headers然后拿到返回的信息就行了 -
不是仿,是直接登录到微信公众平台,但是没有通过他们的登录界面登录进去,而是用程序提交用户名密码登录进去,然后进行相关操作,往相关接口提交数据