一、开发工具
**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