关于web微信root-显示自己的头像

注意,文章是连贯的,应从第一篇来看

上次说了有关二维码的更新问题,下面记录一下获取自己的头像的问题

我们可以查看web微信的界面,发现在扫码成功后其页面并没有发生跳转,从而可以知道其为ajax方式,这里你会发现会有pending的请求,应为要一直发请求,看是否扫码,pending一会断开,返回408状态码,然后接着发请求,一直循环

所以在login.html加入ajax,这里用的jquery,这里关于返回的状态码,你可以进行测试,408-无人扫 201-成功扫 200-手机点击确定登陆

<script>
    $(function () {
        checklogin();
    });
    function checklogin() {
        $.ajax({
            url: '/check-login.html',
            type: 'GET',
            dataType: 'JSON',
            success: function (arg) {
                if (arg.code == 408){//无人扫码
                    checklogin();//这里要递归,因为要一直发请求
                }else if (arg.code == 201){//
                    $('#qrcode').attr('src',arg.data);//这里是接受用户的头像
                    checklogin();
                }else if (arg.code == 200){
                    location.href = '/user.html';//手机上确定登陆,页面跳转
                }

            }
        })
    }
</script>

当然你需要将django的url配置

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login.html/$', views.login),
    url(r'^check-login.html/$', views.check_login),
    url(r'^user.html/$', views.user),
    url(r'^contact_list.html/$', views.contact_list),
    url(r'^send_msg.html/$', views.send_msg),
    url(r'^get_msg.html/$', views.get_msg),
]

首先要确定要发送的url

这里QCODE是上个函数返回二维码的qcode,CTIME是时间戳,TIP是一个登陆凭证这里注意

TIP原来返回的是1,也就是在无人扫是是一,但如果是点击登陆,或者跳转时变为0

这里是views.py的函数

def check_login(request):
    """
    监听用于是否扫码,是否点击确认
    :param request:
    :return:
    """
    global TIP
    ret = {'code': 408, 'data': None}
    r1 = requests.get(
        url='https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=%s&tip=%s&r=1749695388&_=%s' % (
            QCODE, TIP, CTIME)
    )
    if 'window.code=408' in r1.text:
        print('无人扫')
        return JsonResponse(ret)
    elif 'window.code=201' in r1.text:
        ret['code'] = 201
        TIP = 0
        avatar = re.findall("window.userAvatar = '(.*)';", r1.text)[0]
        ret['data'] = avatar
        return JsonResponse(ret)
    elif 'window.code=200' in r1.text:
        """
        window.code=200;
        window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AcXy5ztnQJ2IpDYRovCJl1YW@qrticket_0&uuid=IaOl9pugOw==&lang=zh_CN&scan=1535854116";

        """
        ALL_COOKIE_DICT.update(r1.cookies.get_dict())
        redirect_url = re.findall('window.redirect_uri="(.*)";', r1.text)[0]
        redirect_url += '&fun=new&version=v2'
        r2 = requests.get(
            url=redirect_url
        )
        ALL_COOKIE_DICT.update(r2.cookies.get_dict())
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(r2.text, 'html.parser')
        for tag in soup.find('error').children:
            TICKET_DICT[tag.name] = tag.get_text()
        ret['code'] = 200
        return JsonResponse(ret)

当状态码返回201时,在通过正则提取返回的img的url,然后通过ajax的更新,就可以实现对头像的获取

完整源码:https://github.com/LelandYan/weixinroot

欢迎指教

猜你喜欢

转载自blog.csdn.net/qq_41682681/article/details/82414448