VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Python爬虫实战,DecryptLogin模块,Python模拟登录实现网易云音乐自动签到

前言:

之前在逛一些贴吧论坛上经常看到类似于"跪求xxx网站自动签到的脚本"这样的贴子,这么说来这玩意市场需求量还是挺大的样子。这一次我们不会采用网上烂大街的selenium作为我们的自动签到解决方案。话不多说,让我们愉快地开始实现一下网易云音乐自动签到

开发工具

Python版本:3.6.4

相关模块:

DecryptLogin模块;

argparse模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

既然要签到,首先,自然是需要模拟登录啦,这里我们还是简单地利用我们开源的DecryptLogin库来实现网易云音乐的模拟登录:

'''模拟登录'''
@staticmethod
def login(username, password):
  lg = login.Login()
  _, session = lg.music163(username, password)
  return session

成功登录之后,我们来分析一下如何实现网易云音乐的自动签到。按F12打开开发者工具或鼠标右键检测,然后点击一下网易云音乐的签到按钮:

可以发现一个疑似签到用的post请求:

其链接构成为:

'https://music.163.com/weapi/point/dailyTask?csrf_token=' + csrf

之前的文章里我们说过,csrf这个参数在登录后的cookies里可以找到,类似这样:

csrf = re.findall('__csrf=(.*?) for'str(session.cookies))[0]

所以我们现在要解决的问题是如何找到该post请求需要提交的data的原文,因为网页里看到的内容是加密后的,就像这样:

第一个显然是我们找到签到接口,那就点开第二个看看吧:

query不会就是我们想要的原文吧。尝试成功的话岂不是血赚?于是,调用一下DecryptLogin库里写好的网易云音乐post参数加密算法,来加密一下data(网易云音乐所有post请求的携带的data原文都要先用一个加密算法进行加密之后再提交):

from DecryptLogin.platforms.music163 import Cracker

cracker = Cracker()
# 注: typeid为0代表APP上签到, 为1代表在网页上签到
data = {
          'type': typeid
        }
data = cracker.get(data)

然后发送请求测试一下:

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)

发现返回的数据是这样的:

这个结果说明我们刚刚的猜想完全正确,只是因为我们已经签到过了,所以才显示重复签到。最后,为了节约每天在命令行输入账号密码的时间,我们可以在脚本的最前面添加几行代码:

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文件里读取用户的账户名密码,否则就启动命令行参数解析函数:

'''命令行参数解析'''
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模拟登录系列,下篇文章分享爬取微博表情包。

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

出处:https://www.cnblogs.com/daimubai/p/15020325.html


相关教程