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日

相关文章

  • Python 实现网页自动截图的示例讲解

    Python 实现网页自动截图需要使用第三方库,比较流行的是 Selenium 和 Pyppeteer。这里以 Selenium 为例,讲解实现网页自动截图的攻略。 准备工作 首先需要安装 Selenium,可以通过 pip 命令进行安装: pip install selenium 接着需要安装浏览器驱动,例如 Chrome 驱动。可以到 ChromeDri…

    python 2023年6月6日
    00
  • Python2和Python3中urllib库中urlencode的使用注意事项

    Python 2 和 Python 3 版本中 urllib 库的 urlencode 函数用于将字典或参数列表转换为 URL 编码的数据。但是在 Python 2 和 Python 3 中使用的方法略有不同。 Python 2 基本使用 在 Python 2 中使用 urlencode 函数需要先导入 urllib 模块。urlencode 函数接受一个字…

    python 2023年5月31日
    00
  • Python enumerate()计数器简化循环

    当我们在使用 Python 进行循环迭代时,可能需要记录当前迭代到第几次循环。这时应该使用 enumerate() 内置函数。enumerate()专门用于将一个可迭代对象中的每个元素对应一个递增的计数器,从而简化循环的过程。 下面是 enumerate() 函数的标准语法: enumerate(sequence, start=0) 该函数接受两个参数:se…

    python 2023年6月3日
    00
  • Python多进程库multiprocessing中进程池Pool类的使用详解

    下面详细讲解一下Python多进程库multiprocessing中进程池Pool类的使用详解。 什么是进程池? 在Python的multiprocessing模块中,Pool类用来管理和调度进程。使用进程池可以有效地提高进程的并发处理能力,使得进程可以被重复利用来完成多个任务。 如何使用进程池? 在使用进程池之前,需要先导入multiprocessing模…

    python 2023年5月19日
    00
  • Python学习之字符串常用方法总结

    Python学习之字符串常用方法总结 本文旨在总结Python的字符串常用方法,帮助大家更好地理解和掌握Python的字符串。 字符串的定义 在Python中,字符串是以单引号或双引号括起来的一串字符,例如: str1 = ‘hello world’ str2 = "I love Python" 字符串的基本操作 字符串的连接 可以使用”…

    python 2023年5月14日
    00
  • 执行Python程序时模块报错问题

    当我们在执行Python程序时,有时会遇到模块报错的问题。这通常是由于Python环境配置不正确、Python库缺失路径不正确等因引起的。以下是一些常见的模块报错的解决方案: 1. 安装缺失的Python库 如果在执行Python程序时遇到了类似以下的报错: ModuleNotFoundError: No module named ‘numpy’ 这说明我们…

    python 2023年5月13日
    00
  • python随机模块random的22种函数(小结)

    Python随机模块random的22种函数(小结) Python的random模块提供了许多用于生成随机数的函数。本文将介绍random模块的22种函数,包括生成随机整数、随机浮点数、随序列、随机字符串等。每个函数都提供了详细的说明和示例代码,方便读者学习和实践。 1. random.random() random.random()函数用于生成一个0到1之…

    python 2023年5月13日
    00
  • python基本算法之实现归并排序(Merge sort)

    Python基本算法之实现归并排序(Mergesort) 什么是归并排序? 归并排序是一种常见的排序算法,它的核心思想是将一个大的数组成两个小的数组,然后对这两个小的数组进行排序,最后将它们合并成一个有序的数组。 归并排序的原理 归并排序是一种分治算法,的核心思想是将一个大的数组成两个小的数组,然后对这两个小的数组进行排序,最后将它们合并成一个有序的数组。具…

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