• 网易云签到可抽奖?那一年我能签到365天。不信?你看。


    前言

          大家好,这里做一个数据采集,不管是生活中还是工作中,对于咱们程序员来说,耳机可以说是必不可少的一项工具了,上班也带着,开车就外放,坐公交地铁也戴着。那么采集一下大家一般都是用的哪款音乐软件呢?那就我先来吧。我只用网易云,其他的基本没用过。用QQ音乐的可以评论扣1,网易云扣2,酷狗扣3.应该基本都是用这三个吧。欢迎大家评论出你的音乐软件,评论有惊喜哈。

          

           我用网易云的原因之一就是歌曲下会有一些比较触动的评论。所以比较喜欢。好了废话说了一堆,下面进入咱们的正题

    正文

           其实很多网站都有签到抽奖,或者签到送礼品的,今天也是闲着无聊,又不能让老板发现我在摸鱼。所以就给大家整个小案例吧。今天的案例就是网易云自动签到脚本,你值得拥有。

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

    '''模拟登录'''@staticmethoddef 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的原文,因为网页里看到的内容是加密后的,就像这样:

    不知道为啥直觉性地想先搜索一下daily这个关键词(因为还是直接分析js代码打断点的话,

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

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

    from DecryptLogin.platforms.music163 import Cracker
    1. cracker = Cracker()
    2. # 注: typeid为0代表APP上签到, 为1代表在网页上签到
    3. data = {
    4. 'type': typeid
    5. }
    6. data = cracker.get(data)

    然后发送请求测试一下:

    ​​​​​​​

    1. signin_url = 'https://music.163.com/weapi/point/dailyTask?csrf_token=' + csrf
    2. headers = {
    3. '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',
    4. 'Content-Type': 'application/x-www-form-urlencoded',
    5. 'Referer': 'http://music.163.com/discover',
    6. 'Accept': '*/*'
    7. }
    8. res = self.session.post(signin_url, headers=headers, data=data)

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

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

    1. ​​​​​​​​​​​​​​
    2. if os.path.exists('config.json'):
    3. f = open('config.json', 'r', encoding='utf-8')
    4. info = json.load(f)
    5. f.close()
    6. else:
    7.   args = parseArgs()
    8. info = {'username': args.username, 'password': args.password}
    9. f = open('config.json', 'w', encoding='utf-8')
    10. json.dump(info, f)
    11. f.close()
     
    

    解释一下代码含义,就是如果当前文件夹里有config.json这个文件:

    那么我们就直接从这个json文件里读取用户的账户名密码,否则就启动命令行参数解析函数:

    ​​​​​​​

    1. '''命令行参数解析'''
    2. def parseArgs():
    3. parser = argparse.ArgumentParser(description='网易云音乐自动签到')
    4. parser.add_argument('--username', dest='username', help='用户名', type=str, required=True)
    5. parser.add_argument('--password', dest='password', help='密码', type=str, required=True)
    6. args = parser.parse_args()
    7.   return args

    让用户手动输入账户密码,并自动保存到config.json这个文件中,这样下次就不需要再重新输入一遍账户密码啦。

    All done~完整源代码关注下方公众号即可

    效果展示

    运行方式:

    python signin.py --username 用户名 --password 密码

    因为涉及到账户密码,就打码了。就截个效果图吧,因为测试的时候已经签到过一次了,所以运行脚本再签到一次就显示因为重复签到而签到失败了,懒得找新的账号了

     让我看看哪位兄弟能比我等级还高。

     

     

  • 相关阅读:
    使用json-server来创建mockserver
    LeetCode 85双周赛(补记)
    易点易动固定资产管理系统:定制流程与用量控制的高效管理利器
    amlogic 机顶盒关闭DLNA 后,手机还能搜到盒子
    矩阵理论复习(二)
    【Linux基础】第30讲 Linux用户和用户组权限控制命令(二)
    高尔顿的表哥是谁? ^-^ 理解线性与回归---人工智能工作笔记0017
    【C】语言文件操作(二)
    MySQL如何一劳永逸的永久支持输入中文
    Vue3问题:如何实现密码加密登录?前后端!
  • 原文地址:https://blog.csdn.net/weixin_43881394/article/details/125506270