一、開發工具
**Python****版本:**3.6.4
相關模塊:
DecryptLogin模塊;
argparse模塊;
以及一些Python自帶的模塊。
二、環境搭建
安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。
三、原理簡介
既然要簽到,首先,自然是需要模擬登錄啦,這里我們還是簡單地利用我們開源的DecryptLogin庫來實現網易云音樂的模擬登錄:
1
2
3
4
5
6
|
'''模擬登錄''' @staticmethod def login(username, password): lg = login.Login() _, session = lg.music163(username, password) return session |
成功登錄之后,我們來分析一下如何實現網易云音樂的自動簽到。按F12打開開發者工具或鼠標右鍵檢測,然后點擊一下網易云音樂的簽到按鈕:
可以發現一個疑似簽到用的post請求:
其鏈接構成為:
1
|
'https://music.163.com/weapi/point/dailyTask?csrf_token=' + csrf |
之前的文章里我們說過,csrf這個參數在登錄后的cookies里可以找到,類似這樣:
1
|
csrf = re.findall( '__csrf=(.*?) for' , str (session.cookies))[ 0 ] |
所以我們現在要解決的問題是如何找到該post請求需要提交的data的原文,因為網頁里看到的內容是加密后的,就像這樣:
第一個顯然是我們找到簽到接口,那就點開第二個看看吧:
query不會就是我們想要的原文吧。嘗試成功的話豈不是血賺?于是,調用一下DecryptLogin庫里寫好的網易云音樂post參數加密算法,來加密一下data(網易云音樂所有post請求的攜帶的data原文都要先用一個加密算法進行加密之后再提交):
1
2
3
4
5
6
7
8
|
from DecryptLogin.platforms.music163 import Cracker cracker = Cracker() # 注: typeid為0代表APP上簽到, 為1代表在網頁上簽到 data = { 'type' : typeid } data = cracker.get(data) |
然后發送請求測試一下:
1
2
3
4
5
6
7
8
|
signin_url = 'https://music.163.com/weapi/point/dailyTask?csrf_token=' + csrf headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' , 'Content-Type' : 'application/x-www-form-urlencoded' , 'Referer' : 'http://music.163.com/discover' , 'Accept' : '*/*' } res = self .session.post(signin_url, headers = headers, data = data) |
發現返回的數據是這樣的:
這個結果說明我們剛剛的猜想完全正確,只是因為我們已經簽到過了,所以才顯示重復簽到。最后,為了節約每天在命令行輸入賬號密碼的時間,我們可以在腳本的最前面添加幾行代碼:
1
2
3
4
5
6
7
8
9
10
|
if os.path.exists( 'config.json' ): f = open ( 'config.json' , 'r' , encoding = 'utf-8' ) info = json.load(f) f.close() else : args = parseArgs() info = { 'username' : args.username, 'password' : args.password} f = open ( 'config.json' , 'w' , encoding = 'utf-8' ) json.dump(info, f) f.close() |
解釋一下代碼含義,就是如果當前文件夾里有config.json這個文件:
那么我們就直接從這個json文件里讀取用戶的賬戶名密碼,否則就啟動命令行參數解析函數:
1
2
3
4
5
6
7
|
'''命令行參數解析''' def parseArgs(): parser = argparse.ArgumentParser(description = '網易云音樂自動簽到' ) parser.add_argument( '--username' , dest = 'username' , help = '用戶名' , type = str , required = True ) parser.add_argument( '--password' , dest = 'password' , help = '密碼' , type = str , required = True ) args = parser.parse_args() return args |
讓用戶手動輸入賬戶密碼,并自動保存到config.json這個文件中,這樣下次就不需要再重新輸入一遍賬戶密碼啦。
四、效果展示
運行方式:
python signin.py --username 用戶名 --password 密碼
到此這篇關于Python模擬登錄網易云音樂并自動簽到的文章就介紹到這了,更多相關Python模擬登錄并簽到內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_43649691/article/details/117416881