下面是Python模拟登录网易云音乐并自动签到的攻略:
步骤一:分析登录过程
我们首先需要分析网易云音乐的登录过程,以便用Python进行模拟登录。打开网易云音乐官网,随便点击一首歌曲,然后点击登录按钮,在弹出的登录框中填写手机号和密码,点击登录后,打开开发者工具(Chrome按F12),找到Network选项卡,再次点击登录按钮,可以看到在Network面板里面有大量的请求记录。
我们需要找到登录请求的URL、请求方式、请求头、请求体等信息。在本次登录请求中,发现请求方式为POST,请求头中有Accept、Content-Type、Referer等参数,请求体中有手机号和密码等参数。找到这些信息后,我们就可以用Python来构造登录请求。
步骤二:构造Python代码
- 首先我们需要引入必要的第三方Python库,代码如下:
python
import requests
import json
import hashlib
import base64
from Crypto.Cipher import AES
- 接着我们需要设置请求头和请求体参数,其中请求体中的手机号、密码、加密后的密码等参数需要进行一些处理,具体方法参见下面代码中的注释:
```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
}
```
- 最后我们需要构造登录请求,并通过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技术站