(pthon)了解微信網(wǎng)頁登陸的原理,實現(xiàn)模擬登陸

1.先獲取uuid

這個其實類似獲取驗證碼一樣,每次刷新都會不一樣秦忿,你只需要拿一次刷新的結(jié)果就好

//獲取uuid的地址
https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Flogin.weixin.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN
//返回數(shù)據(jù)
window.QRLogin.code = 200;
window.QRLogin.uuid = "";
2.通過獲取的uuid,獲取授權(quán)二維碼
//返回的是一張二維碼圖耍铜,手機掃描即可
https://login.weixin.qq.com/qrcode/(uuid的值)
3.獲取登陸地址
//構(gòu)造以下地址,掃描步驟1的二維碼,手機確定后打開構(gòu)造好的地址
https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=(uui的值)
//返回數(shù)據(jù)
window.code = 200;
window.redirect_uri ="登陸成功的跳轉(zhuǎn)地址";
4.獲得跳轉(zhuǎn)鏈接后搬卒,就可以登陸了

該鏈接是獨立的,隨便用一個瀏覽器打開都可以

5.代碼實現(xiàn)登陸翎卓,并獲取所有聯(lián)系人契邀,公眾號及群聊信息
import requests
import os
import time
import json

wx_web = 'https://wx.qq.com/cgi-bin/mmwebwx-bin'
wx_login = 'https://login.wx.qq.com'
session = requests.Session()


def step1_get_uuid():
    url = wx_login + '/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Flogin.weixin.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage'
    text = session.get(url).text
    uuid = text[text.rfind('uuid = "') + len('uuid = "'):len(text) - 2]
    return uuid


def step2_get_qr_code(uuid, timeout=6):
    url = wx_login + '/qrcode/%s' % uuid
    content = session.get(url).content
    with open('qr_code.png', 'wb') as fp:
        fp.write(content)
    os.system('qr_code.png')
    time.sleep(timeout)
    os.remove('qr_code.png')


def step3_login_address(uuid):
    url = wx_login + '/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=%s' % uuid
    text = session.get(url).text
    if text.find('window.code=200;') >= 0:
        return text[text.find('redirect_uri="') + len('redirect_uri="'):len(text) - 2]
    else:
        return None


def step4_open_it(url):
    session.get(url)


def step5_get_all_info():
    contact_url = '%s/webwxgetcontact' % wx_web
    data = {'BaseRequest': ''}
    r = session.post(contact_url, data=json.dumps(data))
    json_data = json.loads(r.content.decode('utf-8'))
    return json_data


if __name__ == '__main__':
    # 獲取uuid
    uuid = step1_get_uuid()
    # 獲取授權(quán)二維碼
    step2_get_qr_code(uuid)
    # 獲取登陸地址
    url = step3_login_address(uuid)
    if url is not None:
        # 打開登陸地址
        step4_open_it(url)
        # 獲取所有信息
        data = step5_get_all_info()
        mp_type = {
            8: {'name': '個人訂閱號', 'count': 0, 'list': []},
            0: {'name': '好友', 'count': 0, 'list': [],
                'gender': {'man': 0, 'woman': 0, 'undefined': 0}},
            24: {'name': '商標公眾號', 'count': 0, 'list': []},
            56: {'name': '微信團隊', 'count': 0, 'list': []},
            29: {'name': '未知', 'count': 0, 'list': []},
            -1: {'name': '群聊', 'count': 0, 'list': []}
        }
        for x in data['MemberList']:
            if x['UserName'].count('@') == 2:
                mp_type[-1]['count'] += 1
                mp_type[-1]['list'].append(x['NickName'])
            else:
                mp_type[x['VerifyFlag']]['count'] += 1
                if x['VerifyFlag'] is not 0:
                    mp_type[x['VerifyFlag']]['list'].append(x['NickName'])
                else:
                    if x['Sex'] == 1:
                        mp_type[x['VerifyFlag']]['gender']['man'] += 1
                    elif x['Sex'] == 2:
                        mp_type[x['VerifyFlag']]['gender']['woman'] += 1
                    else:
                        mp_type[x['VerifyFlag']]['gender']['undefined'] += 1
        for key, item in mp_type.items():
            print(item)
            print(100 * '-')
    else:
        print('登陸失敗!')

演示:

show.gif
6.其實itchat包就是利用模擬登陸來實現(xiàn)的
有興趣的可以去看他的官網(wǎng),或者源碼:itchat文檔

寫在最后失暴,當某一天你也設(shè)計網(wǎng)站的綁定登陸不妨參考一下微信的方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坯门,一起剝皮案震驚了整個濱河市微饥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌古戴,老刑警劉巖欠橘,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異现恼,居然都是意外死亡肃续,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門叉袍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始锚,“玉大人,你說我怎么就攤上這事喳逛∏瓢疲” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵润文,是天一觀的道長察郁。 經(jīng)常有香客問我,道長转唉,這世上最難降的妖魔是什么皮钠? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮赠法,結(jié)果婚禮上麦轰,老公的妹妹穿的比我還像新娘。我一直安慰自己砖织,他們只是感情好款侵,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侧纯,像睡著了一般新锈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眶熬,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天妹笆,我揣著相機與錄音,去河邊找鬼娜氏。 笑死拳缠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贸弥。 我是一名探鬼主播窟坐,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哲鸳?” 一聲冷哼從身側(cè)響起臣疑,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徙菠,沒想到半個月后朝捆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡懒豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脸秽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒老。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖记餐,靈堂內(nèi)的尸體忽然破棺而出驮樊,到底是詐尸還是另有隱情,我是刑警寧澤片酝,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布囚衔,位于F島的核電站,受9級特大地震影響雕沿,放射性物質(zhì)發(fā)生泄漏练湿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一审轮、第九天 我趴在偏房一處隱蔽的房頂上張望肥哎。 院中可真熱鬧,春花似錦疾渣、人聲如沸篡诽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杈女。三九已至,卻和暖如春吊圾,著一層夾襖步出監(jiān)牢的瞬間达椰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工街夭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砰碴,地道東北人躏筏。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓板丽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埃碱,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359