高考完一直想写点程序,但发现自己初中学的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("音频文件均保存在代码文件所在文件夹中")
复制代码
代码文件下载地址:
GitHub开源地址:
效果演示:


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