Python中如何實現(xiàn)MOOC掃碼登錄
1、基本原理
- 訪問網(wǎng)站掃碼登錄頁,網(wǎng)站給瀏覽器返回一個二維碼和一個唯一標志KEY
- 瀏覽器開啟定時輪詢服務器,確認KEY對應的掃碼結果
- 用戶使用app掃碼二維碼,app獲取KEY并告知服務器已掃碼
- App確認登陸(包含個性化校驗過程),服務器更新KEY的校驗結果
- 瀏覽器輪詢結果成功,獲得一次性token
- 帶上token請求資源,獲得有效cookie,正常訪問資源。
2、代碼實現(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() # 拿到相應的json數(shù)據(jù) codeUrl = resp['result']['codeUrl'] # 提取二維碼url及唯一標志key pollKey = resp['result']['pollKey'] codejpg = session.get(codeUrl) # 請求二維碼 with open('text.jpg','wb') as f: # 下載二維碼 f.write(codejpg.content)
2、模擬輪詢
利用已得的唯一標志key對服務器發(fā)起定時輪詢,獲得相應數(shù)據(jù)
通過分析,codeStatus的值為0是表示,等待掃碼;codeStatus的值為1是表示,已掃碼,等待確認登錄;codeStatus的值為2是表示,掃碼成功,此時服務器會返回token,這個對我們很有用
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請求資源
獲得有效cookie,正常訪問資源。
vaildateUrl = f'https://www.icourse163.org/passport/logingate/mocMobChangeCookie.htm?token={token}&returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt' # returnUrl指MOOC網(wǎng) session.get(vaildateUrl,headers = header)
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python中TypeError:unhashable?type:'dict'錯誤的解決辦法
這篇文章主要給大家介紹了關于Python中TypeError:unhashable?type:'dict'錯誤的解決辦法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2023-04-04Python與Appium實現(xiàn)手機APP自動化測試的示例代碼
本文主要介紹了Python與Appium實現(xiàn)手機APP自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Python實現(xiàn)數(shù)據(jù)結構線性鏈表(單鏈表)算法示例
這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)結構線性鏈表(單鏈表)算法,結合實例形式分析了Python單鏈表的定義、節(jié)點插入、刪除、打印等相關操作技巧,需要的朋友可以參考下2019-05-05Python實現(xiàn)提取JSON數(shù)據(jù)中的鍵值對并保存為.csv文件
這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)讀取JSON文件數(shù)據(jù),并將JSON文件中指定的鍵值對數(shù)據(jù)轉換為.csv格式文件,感興趣的小伙伴可以了解下2023-09-09Python3加密解密庫Crypto的RSA加解密和簽名/驗簽實現(xiàn)方法實例
這篇文章主要介紹了Python3加密解密庫Crypto的RSA加解密和簽名/驗簽實現(xiàn)方法實例,需要的朋友可以參考下2020-02-02