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

yizhihongxing

下面是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日

相关文章

  • python 3.6.2 安装配置方法图文教程

    下面我为你详细讲解“python3.6.2安装配置方法图文教程”的完整攻略,具体流程如下: 步骤一:下载python3.6.2安装包 首先,我们需要到官网下载python3.6.2的安装包,网址为:https://www.python.org/ftp/python/3.6.2/python-3.6.2.exe。 下载完成后,我们双击安装包,进入安装向导界面。…

    python 2023年5月14日
    00
  • Python字典fromkeys()方法使用代码实例

    下面是关于Python字典fromkeys()方法的详细讲解,包含两条示例说明。 1. 什么是Python字典? Python字典是一种无序、可变、键-值对存储的数据类型。每个键对应一个值,键和其对应的值之间用冒号分隔,键必须唯一且不可变,值可以是任何数据类型(包括字符串、数字、列表、元组等)。 2. 什么是Python字典fromkeys()方法? Pyt…

    python 2023年5月13日
    00
  • Python pathlib模块使用方法及实例解析

    Python pathlib模块使用方法及实例解析 Python的pathlib模块提供了一种面向对象的方式来操作文件系统路径。它可以帮助我们轻松地创建、访问和操作文件和目录。本文将详细讲解pathlib模块的使用方法和示例。 基本用法 首先,我们需要导入pathlib模块,并创建一个Path对象。然后,我们可以使用Path对象的方法来访问和操作文件和目录。…

    python 2023年5月15日
    00
  • Python实现去除列表中重复元素的方法总结【7种方法】

    下面我将详细讲解“Python实现去除列表中重复元素的方法总结【7种方法】”的完整攻略。 一、需求背景和问题描述 在 Python 编程中,经常会遇到需要从列表中删除重复元素的场景。比如,我们从数据库中获取了一个列表,但是其中可能包含重复的元素,这时候我们就需要去重。 那么问题来了,Python 中有哪些方法可以去除列表中的重复元素呢? 本篇文章将为大家总结…

    python 2023年6月3日
    00
  • 利用Python Matlab绘制曲线图的简单实例

    下面是《利用Python Matlab绘制曲线图的简单实例》的完整攻略。 1. 准备工作 在绘制曲线图之前,需要先安装相应的绘图库。这里我们介绍两个常用的库:matplotlib(Matlab风格的绘图库)和seaborn(基于matplotlib的高级可视化库)。可以使用以下命令来安装: !pip install matplotlib seaborn 2.…

    python 2023年5月19日
    00
  • 解决链式 Python 拼图:

    【问题标题】:Solving a Chain Link Python Puzzle:解决链式 Python 拼图: 【发布时间】:2023-04-07 00:17:01 【问题描述】: 我不确定从以下 python 谜题开始。 “你持有一个链的链接。实现一个方法longerSide来查找链的哪一侧有更多的链接,相对于你持有的链接。如果左侧有更多的链接返回Si…

    Python开发 2023年4月7日
    00
  • python利用proxybroker构建爬虫免费IP代理池的实现

    Python 利用 ProxyBroker 构建爬虫免费 IP 代理池的实现 在 Python 爬虫中,使用代理 IP 可以有效地避免被封 IP 或者限制访问。ProxyBroker 是一个 Python 库,可以帮助我们构建一个免费的 IP 代理池。以下是 Python 利用 ProxyBroker 构建爬虫免费 IP 代理池的实现的详细介绍。 安装 Pr…

    python 2023年5月15日
    00
  • Python命令行参数argv和argparse该如何使用

    下面就来详细讲解一下“Python命令行参数argv和argparse该如何使用”的完整攻略。 Python命令行参数argv 在Python中,使用argv可以接受在命令行中传入的参数,这些参数可以在运行程序时动态的传入,与程序代码分离,从而方便程序的调用和使用。 在Python中,我们可以通过sys模块的argv方法来获取命令行传入的参数,如下所示: i…

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