不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息,甚至可以根据需要来对它们进行有效的查看和管理。是的,没错,这完全可以。本篇博主将会给大家分享一下如何模拟登录网页版的微信
,并展示模拟登录后获取的好友列表信息。
微信模拟登录的过程比较复杂,当然不管怎么样方法都是万变不离其宗,我们还是使用fiddler
抓包工具来模拟登录的过程。
好了,下面让我们一步一步的详细讲解一下如何实现的这个复杂的过程。
1. 用fiddler模拟登录的请求
首先,我们在浏览器上打开微信网页版(fiddler已经在这之前打开了),然后我们会看到一个二维码的界面。
然后我们使用手机微信扫描并确认,这时候网页版的微信就登陆了。
好,我们去看看fiddler
都给我们抓取了什么信息包。由于过程中发出的请求有点多,这里把抓包按操作进行分解并逐一分析。
1.打开微信网页
这一步骤的抓包是这样的,发现其中login.wx.qq.com
的两个链接是我们需要的。
于是点开详细分析一下。
第一个链接如下,是一个get
请求,可以看到uri中携带了一些参数appid、redirect_uri、fun、lang、_
。
GET /jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1520350213674 HTTP/1.1
经过多次抓取发现appid、redirect_uri、fun、lang
参数都是固定的,而_
是一串变化的数字,我们在之前模拟京东商城的文章提过,它其实是一个时间戳
,如果不清楚可以回顾一下Python爬虫之模拟登录京东商城。
知道这些参数,模拟get发送出去就可以了。那么我们为什么要模拟这一步呢?
是因为访问这个链接会有如下的响应,而其中有我们后续需要的重要信息uuid
(后面步骤会提到)。
window.QRLogin.code = 200; window.QRLogin.uuid = "Idf_QdW1OQ==";
2.模拟获取二维码
微信网页提供的登录方式是扫码,我们模拟也无法避开,因此也要进行扫码验证。回到浏览器,使用开发者工具可以轻松找到二维码的链接。
https://login.weixin.qq.com/qrcode/AdgAWNry-w==
我们发现最后的字符串是变化的。等等,它和uuid
一模一样的。没错,它就是uuid
,用来保证二维码的唯一性。
因此,我们将上面提取的uuid
拼接到后面就可以得到二维码图片了,然后进行扫码确认操作。
3.识别登录状态
为了识别扫码是否成功,这个步骤我们需要用到上面提到的第二个链接。
GET /cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=Idf_QdW8OQ==&tip=1&r=68288473&_=1520050213675 HTTP/1.1
这个链接也是个get请求
,同样携带了一些参数。
实际上在抓包过程发现只要我们不扫描二维码,这个链接就会一直重复发送直到二维码被扫描或者超时。
那么我们如何判断二维码是否被扫描或者已经登陆了呢?
还是通过响应的数据来进行判断的。经分析发现如果二维码一直没被扫,那么响应是这样的:
window.code=408;
但是如果二维码被扫描了,响应是这样的:
window.code=201;window.userAvatar = .....