高考完一直想写点程序,但发现自己初中学的Python都忘光了,于是又重新学了一下。
有一天用以前看到的方法下载网易云上面的音乐的时候,突发奇想,想写一个自动化脚本,这样就可以全自动下载音乐了{:301_997:}
详细的下载方法网上能够找到https://www.bilibili.com/video/BV1Te4y1F7br/,这里就不再赘述了,想理解原理的朋友可以看一下。
这个自动化脚本主要是基于playwright库编写的,通过模拟浏览器操作来下载,可以做到能试听的音乐就可以下载。
大体过程可以分为三步:
1、向用户发送登录请求,用户扫码登录网易云音乐后保存登录信息,下一次使用可以直接加载。
2、进入歌曲详情页时,模拟点击播放按钮
3、拦截传输的m4a文件并下载
使用指南:
1、先安装playwright库及其依赖的浏览器内核,可通过如下命令安装:
pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple
playwright install
2、新建一个文件夹,将first.py和main.py两个文件放在里面,先运行first.py,并按照页面上的指示进行扫码登陆(如果有些卡顿的话可以退出重进一下)
3、运行main.py,将想要下载的音乐的详情页地址复制下来,粘贴到程序中,按回车就可以自动下载了。
下面直接上代码:
1、first.py文件代码:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
# 打开网易云首页
page.goto("https://music.163.com")
page.get_by_role("link", name="登录").click()
# 模拟点击"登录"
page.wait_for_timeout(1000)
print("请在浏览器中扫码登录...")
# 等待手动扫码登录完成
input("登录成功后,回到这里按回车...")
# 保存完整登录状态
context.storage_state(path="login.json")
print("登录状态已保存到 login.json")
browser.close()
2、main.py代码
import re
from playwright.sync_api import Playwright, sync_playwright
from urllib.request import urlretrieve
url_list = []
name_list = []
通过响应代码找出下载链接
def add_list(response):
if response.status == 206 :
url_list.append(response.url)
下载函数
def download(playwright: Playwright,url1):
browser = playwright.chromium.launch()
context = browser.new_context(storage_state="login.json") # 加载登录信息
page = context.new_page()
page.on("response", add_list)
page.goto(url1)
模拟点击播放按钮
page.locator("iframe[name="contentFrame"]").content_frame.get_by_role("link", name="播放", exact=True).click()
page.wait_for_timeout(1000) # 等待页面加载,可适当延长或缩短
name_list.append(page.title())
save_path = name_list[0] + ".m4a"
urlretrieve(url_list[0], save_path) # 下载音乐
print("%s 下载完成" % save_path)
# 清空重置列表
name_list.clear()
url_list.clear()
context.close()
with sync_playwright() as playwright:
urls = input("请输入下载链接(多个链接可用空格隔开):").split()
for each in urls:
download(playwright,each)
print("音频文件均保存在代码文件所在文件夹中")
代码文件下载地址:https://pan.quark.cn/s/47f6558ef898
GitHub开源地址:https://github.com/yunlongzhuhuo/CloudMusic-Downloader/
效果演示:


最后再说说编写代码过程中的心得吧
我发现现在AI真的是特别强大,“将登陆状态保存”这个思路就是AI启发我的,并且帮我写了first.py文件的一部分代码。
另外,在编写自动化测试脚本的过程中,可以直接调用playwright中的codegen功能,直接根据操作生成代码,大大提升代码编写效率。
最后希望大家多多评分和发表跟帖,谢谢大家!

