Python模拟登录网易云音乐并自动签到

下面是Python模拟登录网易云音乐并自动签到的攻略:

步骤一:分析登录过程

我们首先需要分析网易云音乐的登录过程,以便用Python进行模拟登录。打开网易云音乐官网,随便点击一首歌曲,然后点击登录按钮,在弹出的登录框中填写手机号和密码,点击登录后,打开开发者工具(Chrome按F12),找到Network选项卡,再次点击登录按钮,可以看到在Network面板里面有大量的请求记录。

我们需要找到登录请求的URL、请求方式、请求头、请求体等信息。在本次登录请求中,发现请求方式为POST,请求头中有Accept、Content-Type、Referer等参数,请求体中有手机号和密码等参数。找到这些信息后,我们就可以用Python来构造登录请求。

步骤二:构造Python代码

  1. 首先我们需要引入必要的第三方Python库,代码如下:

python
import requests
import json
import hashlib
import base64
from Crypto.Cipher import AES

  1. 接着我们需要设置请求头和请求体参数,其中请求体中的手机号、密码、加密后的密码等参数需要进行一些处理,具体方法参见下面代码中的注释:

```python
# 设置请求头
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': 'http://music.163.com/',
'Host': 'music.163.com'
}

# 设置请求体
phone = '你的手机号'
password = '你的密码'

# 密码进行md5加密,并进行base64加密
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
encrypted_password = base64.b64encode(md5.digest()).decode()

# 对加密后的密码进行AES加密
iv = '0102030405060708'
secret_key = b'6&N#nk1x8Fv76VFG'
cipher = AES.new(secret_key, AES.MODE_CBC, iv.encode())
pad = 16 - len(encrypted_password) % 16
pad_password = encrypted_password + chr(pad) * pad
encrypted = cipher.encrypt(pad_password.encode())
value = base64.b64encode(encrypted).decode()

data = {
'params': value,
'encSecKey': 'f08df415e7b73c76fc711db245369e2db24c57962c6e925e2bfcdefa4f5f372e09af392442dd1236c22e0116327d210b194c0324f20cfa22e3f0285c535052d81bffb586260475b92abd37bf9a7de5513acd4e79683cb487cb9f7eac11c8b7e4eb64c515890427524e39e5aeee5a9edc10f3b2579b57aa37e1dd85d88',
'username': phone
}
```

  1. 最后我们需要构造登录请求,并通过Session对象来保存登录状态,方便后面的自动签到。

```python
# 构造登录请求并保持Session状态
session = requests.Session()
session.post('http://music.163.com/weapi/login/cellphone', headers=headers, data=data)

# 测试是否登录成功
response = session.get('http://music.163.com/api/user/playlist?offset=0&limit=1000&uid=1')
print(json.loads(response.text))
```

步骤三:自动签到

我们已经成功模拟登录了网易云音乐,接下来我们需要编写Python代码来实现自动签到功能。点击“签到”按钮后,我们可以看到在Network面板里面有一个POST请求,其中请求的URL是http://music.163.com/weapi/point/dailyTask,同时在请求体中添加了一些签到相关的参数。

具体实现如下:

# 签到请求的URL
url = 'http://music.163.com/weapi/point/dailyTask'

# 签到请求的请求体
data = {
    'type': 0
}

# 发送签到请求
response = session.post(url, headers=headers, data=data)

# 解析签到结果
result = json.loads(response.text)
if result['code'] == 200:
    print('签到成功!')
else:
    print('签到失败:' + result['msg'])

示例一:完整代码实现

import requests
import json
import hashlib
import base64
from Crypto.Cipher import AES


def login():
    # 设置请求头
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Referer': 'http://music.163.com/',
        'Host': 'music.163.com'
    }

    # 设置请求体
    phone = '你的手机号'
    password = '你的密码'

    # 密码进行md5加密,并进行base64加密
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    encrypted_password = base64.b64encode(md5.digest()).decode()

    # 对加密后的密码进行AES加密
    iv = '0102030405060708'
    secret_key = b'6&N#nk1x8Fv76VFG'
    cipher = AES.new(secret_key, AES.MODE_CBC, iv.encode())
    pad = 16 - len(encrypted_password) % 16
    pad_password = encrypted_password + chr(pad) * pad
    encrypted = cipher.encrypt(pad_password.encode())
    value = base64.b64encode(encrypted).decode()

    # 构造登录请求体
    data = {
        'params': value,
        'encSecKey': 'f08df415e7b73c76fc711db245369e2db24c57962c6e925e2bfcdefa4f5f372e09af392442dd1236c22e0116327d210b194c0324f20cfa22e3f0285c535052d81bffb586260475b92abd37bf9a7de5513acd4e79683cb487cb9f7eac11c8b7e4eb64c515890427524e39e5aeee5a9edc10f3b2579b57aa37e1dd85d88',
        'username': phone
    }

    # 构造登录请求并保持Session状态
    session = requests.Session()
    session.post('http://music.163.com/weapi/login/cellphone', headers=headers, data=data)

    # 测试是否登录成功
    response = session.get('http://music.163.com/api/user/playlist?offset=0&limit=1000&uid=1')
    print(json.loads(response.text))

    # 返回Session对象
    return session


def check_in(session):
    # 签到请求的URL
    url = 'http://music.163.com/weapi/point/dailyTask'

    # 签到请求的请求体
    data = {
        'type': 0
    }

    # 发送签到请求
    response = session.post(url, headers=headers, data=data)

    # 解析签到结果
    result = json.loads(response.text)
    if result['code'] == 200:
        print('签到成功!')
    else:
        print('签到失败:' + result['msg'])


if __name__ == '__main__':
    session = login()
    check_in(session)

示例二:使用selenium模拟登录

from selenium import webdriver
import time


def login():
    # 初始化WebDriver对象
    driver = webdriver.Chrome()

    # 打开网易云音乐官网
    driver.get('https://music.163.com/')

    # 点击登录按钮
    driver.switch_to.frame('contentFrame')
    login_btn = driver.find_element_by_xpath('//a[@class="nav f-fr f-login"]')
    login_btn.click()

    # 输入账号密码并登录
    phone = '你的手机号'
    password = '你的密码'
    driver.switch_to.frame('contentFrame')
    phone_input = driver.find_element_by_xpath('//input[@name="username"]')
    password_input = driver.find_element_by_xpath('//input[@name="password"]')
    phone_input.send_keys(phone)
    password_input.send_keys(password)
    submit_btn = driver.find_element_by_xpath('//a[@class="znxt"]')
    submit_btn.click()
    time.sleep(3)

    # 返回WebDriver对象
    return driver


def check_in(driver):
    # 点击签到按钮
    driver.switch_to.frame('contentFrame')
    time.sleep(3)
    check_in_btn = driver.find_element_by_xpath('//a[@id="daily-recommend"]')
    check_in_btn.click()
    time.sleep(3)

    # 解析签到结果
    result = driver.execute_script('return NM.user.getDailyTask()')
    if result['level'] == 1:
        print('签到成功!')
    else:
        print('签到失败!')


if __name__ == '__main__':
    driver = login()
    check_in(driver)
    driver.quit()

以上就是Python模拟登录网易云音乐并自动签到的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python模拟登录网易云音乐并自动签到 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 详解基于K-means的用户画像聚类模型

    详解基于K-means的用户画像聚类模型 简介 K-means是一种经典的聚类算法,可以在无监督的情况下对数据进行分组。本文将详细介绍如何使用K-means算法来构建用户画像聚类模型。 步骤 1.数据收集 首先需要获得用户的相关数据,例如用户的基本信息,用户的行为数据等。这些数据可以从不同的数据源收集,比如数据库、社交网络、推荐系统等。需要注意的是,数据要求…

    python 2023年6月3日
    00
  • Python itertools.product方法代码实例

    Python itertools.product 方法是 Python 标准库 itertools 模块中提供的函数,可以用于计算多个序列的笛卡尔积。本篇攻略将从以下几个方面详细讲解 itertools.product 方法的使用: itertools.product 的语法和参数 itertools.product 方法计算多个序列的笛卡尔积的方法 使用 …

    python 2023年6月3日
    00
  • 如何在Python中插入数据到MongoDB数据库?

    以下是如何在Python中插入数据到MongoDB数据库的完整使用攻略,包括安装PyMongo库、连接MongoDB数据库、插入数据等步骤。同时,提供了两个示例以便更好理解如何在中插入数据到MongoDB数据库。 步骤1:安装PyMongo库 在Python中,我们可以使用pip命令安装Py库。以下是装PyMongo库的基本语法: pip install p…

    python 2023年5月12日
    00
  • 如何在Python 中获取单成员集合中的唯一元素

    要获取单成员集合中的唯一元素,我们可以使用Python中的单成员集合set和元组tuple。以下是获取单成员集合中唯一元素的攻略: 使用set 第一步:创建单成员集合 可以通过传入一个元素来创建单成员set,例如: single_set = set([1]) 第二步:提取元素 我们可以使用set.pop()方法提取其中唯一的元素,例如: unique_ele…

    python 2023年5月13日
    00
  • python利用正则表达式搜索单词示例代码

    以下是“Python利用正则表达式搜索单词示例代码”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来搜索单词。本文将详细讲解Python利用正则表达式搜索单词的方法,以及如何在实际开发中应用。 二、解决方案 2.1 搜索单词的方法 在Python中,搜索单词的方法可以使用正则表达式来实现。我们可以使用re模块中的findall()函数来…

    python 2023年5月14日
    00
  • Python正则表达式 r'(.*) are (.*?) .*’的深入理解

    让我来详细讲解一下关于Python正则表达式 r'(.) are (.?) .*’的深入理解。 首先,我们需要了解正则表达式是什么。正则表达式是一种提供给计算机使用的字符串匹配模式,是一种强大的文本处理工具。它可以用来快速地匹配、验证、搜索和替换文本中的内容,较之手动处理文本的方式更为高效、便捷。 而Python正则表达式 r'(.) are (.?) .*…

    python 2023年6月3日
    00
  • Python实现自动打开电脑应用的示例代码

    下面是详细讲解“Python实现自动打开电脑应用的示例代码”的完整攻略。 简介 我们可以使用Python编写代码,实现自动打开电脑上安装的各种应用程序。这对于需要重复打开同一个应用程序的场景非常有用,比如每次开机需要自动打开QQ。 环境准备 在开始编写代码之前,我们需要确保电脑上已经安装了Python,并对Windows系统进行一些配置。 安装Python …

    python 2023年5月19日
    00
  • Python和Java对比,全面解读哪个语言最赚钱,前景最好?

    Python和Java对比,全面解读哪个语言最赚钱,前景最好? 简介 在当今计算机行业中,Python和Java是两个备受瞩目的编程语言。虽然两者有各自的特点和应用场景,但是大多数程序员和企业都面临着一个共同的问题:如何选择适合自己或企业发展的编程语言,能赚到最多的钱和最好的前景? 本篇文章将从多个方面对Python和Java进行对比,探讨它们的优缺点、应用…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部