Python中如何實(shí)現(xiàn)MOOC掃碼登錄
1、基本原理
- 訪問網(wǎng)站掃碼登錄頁,網(wǎng)站給瀏覽器返回一個(gè)二維碼和一個(gè)唯一標(biāo)志KEY
- 瀏覽器開啟定時(shí)輪詢服務(wù)器,確認(rèn)KEY對應(yīng)的掃碼結(jié)果
- 用戶使用app掃碼二維碼,app獲取KEY并告知服務(wù)器已掃碼
- App確認(rèn)登陸(包含個(gè)性化校驗(yàn)過程),服務(wù)器更新KEY的校驗(yàn)結(jié)果
- 瀏覽器輪詢結(jié)果成功,獲得一次性token
- 帶上token請求資源,獲得有效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) # 請求二維碼
with open('text.jpg','wb') as f: # 下載二維碼
f.write(codejpg.content)
2、模擬輪詢

利用已得的唯一標(biāo)志key對服務(wù)器發(fā)起定時(shí)輪詢,獲得相應(yīng)數(shù)據(jù)
通過分析,codeStatus的值為0是表示,等待掃碼;codeStatus的值為1是表示,已掃碼,等待確認(rèn)登錄;codeStatus的值為2是表示,掃碼成功,此時(shí)服務(wù)器會(huì)返回token,這個(gè)對我們很有用
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)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用unittest進(jìn)行有效測試的示例詳解
這篇文章主要介紹了如何使用?unittest?來編寫和運(yùn)行單元測試,希望通過閱讀本文,大家能了解?unittest?的基本使用方法,以及如何使用?unittest?中的斷言方法和測試用例組織結(jié)構(gòu)2023-06-06
用pyqt5 給按鈕設(shè)置圖標(biāo)和css樣式的方法
今天小編就為大家分享一篇用pyqt5 給按鈕設(shè)置圖標(biāo)和css樣式的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
window11系統(tǒng)下Python3.11安裝numpy庫超詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于window11系統(tǒng)下Python3.11安裝numpy庫的相關(guān)資料,NumPy是Python的第三方擴(kuò)展包,但它并沒有包含在Python標(biāo)準(zhǔn)庫中,因此您需要單獨(dú)安裝它,需要的朋友可以參考下2023-12-12
Python編碼規(guī)范擺脫P(yáng)ython編碼噩夢
Python 中編碼問題,一直是很多 Python 開發(fā)者的噩夢,盡管你是工作多年的 Python 開發(fā)者,也肯定會(huì)經(jīng)常遇到令人神煩的編碼問題,收藏這篇文章以后你可以不用再Google2021-10-10
Ubuntu權(quán)限不足無法創(chuàng)建文件夾解決方案
這篇文章主要介紹了Ubuntu權(quán)限不足無法創(chuàng)建文件夾解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

