Python中如何實(shí)現(xiàn)MOOC掃碼登錄
1、基本原理
- 訪問網(wǎng)站掃碼登錄頁,網(wǎng)站給瀏覽器返回一個(gè)二維碼和一個(gè)唯一標(biāo)志KEY
- 瀏覽器開啟定時(shí)輪詢服務(wù)器,確認(rèn)KEY對(duì)應(yīng)的掃碼結(jié)果
- 用戶使用app掃碼二維碼,app獲取KEY并告知服務(wù)器已掃碼
- App確認(rèn)登陸(包含個(gè)性化校驗(yàn)過程),服務(wù)器更新KEY的校驗(yàn)結(jié)果
- 瀏覽器輪詢結(jié)果成功,獲得一次性token
- 帶上token請(qǐng)求資源,獲得有效cookie,正常訪問資源。
2、代碼實(shí)現(xiàn)
我們以MOOC為例
1、訪問網(wǎng)站掃碼登錄頁,并下載二維碼
session = requests.session() url = 'https://www.icourse163.org/logonByQRCode/code.do?width=182&height=182' # 掃碼登錄url header = { 'referer': 'https://www.icourse163.org/', 'user-agent': ua } resp = session.get(url,headers = header).json() # 拿到相應(yīng)的json數(shù)據(jù) codeUrl = resp['result']['codeUrl'] # 提取二維碼url及唯一標(biāo)志key pollKey = resp['result']['pollKey'] codejpg = session.get(codeUrl) # 請(qǐng)求二維碼 with open('text.jpg','wb') as f: # 下載二維碼 f.write(codejpg.content)
2、模擬輪詢
利用已得的唯一標(biāo)志key對(duì)服務(wù)器發(fā)起定時(shí)輪詢,獲得相應(yīng)數(shù)據(jù)
通過分析,codeStatus的值為0是表示,等待掃碼;codeStatus的值為1是表示,已掃碼,等待確認(rèn)登錄;codeStatus的值為2是表示,掃碼成功,此時(shí)服務(wù)器會(huì)返回token,這個(gè)對(duì)我們很有用
checkUrl = f'https://www.icourse163.org/logonByQRCode/poll.do?pollKey={pollKey}' os.system('start text.jpg') token = None for i in range(20): # 模擬輪詢 checkResp = session.get(checkUrl,headers = header).json() if checkResp['result']['codeStatus'] == 2: token = checkResp['result']['token'] # 提取token else: time.sleep(1) # 每秒一次
3、彈出二維碼,掃碼登錄
os.system('start text.jpg')
4、帶上token請(qǐng)求資源
獲得有效cookie,正常訪問資源。
vaildateUrl = f'https://www.icourse163.org/passport/logingate/mocMobChangeCookie.htm?token={token}&returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt' # returnUrl指MOOC網(wǎng) session.get(vaildateUrl,headers = header)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中TypeError:unhashable?type:'dict'錯(cuò)誤的解決辦法
這篇文章主要給大家介紹了關(guān)于Python中TypeError:unhashable?type:'dict'錯(cuò)誤的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04Python與Appium實(shí)現(xiàn)手機(jī)APP自動(dòng)化測(cè)試的示例代碼
本文主要介紹了Python與Appium實(shí)現(xiàn)手機(jī)APP自動(dòng)化測(cè)試的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法,結(jié)合實(shí)例形式分析了Python單鏈表的定義、節(jié)點(diǎn)插入、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05Python實(shí)現(xiàn)提取JSON數(shù)據(jù)中的鍵值對(duì)并保存為.csv文件
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)讀取JSON文件數(shù)據(jù),并將JSON文件中指定的鍵值對(duì)數(shù)據(jù)轉(zhuǎn)換為.csv格式文件,感興趣的小伙伴可以了解下2023-09-09Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例
這篇文章主要介紹了Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例,需要的朋友可以參考下2020-02-02Python實(shí)現(xiàn)打印螺旋矩陣功能的方法
這篇文章主要介紹了Python實(shí)現(xiàn)打印螺旋矩陣功能的方法,簡(jiǎn)單描述了螺旋矩陣的概念、原理及Python實(shí)現(xiàn)方法,需要的朋友可以參考下2017-11-11wxPython定時(shí)器wx.Timer簡(jiǎn)單應(yīng)用實(shí)例
這篇文章主要介紹了wxPython定時(shí)器wx.Timer簡(jiǎn)單應(yīng)用,實(shí)例分析了Python使用wxPython創(chuàng)建窗口應(yīng)用程序及定時(shí)器的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06