您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
用于备份网易云音乐网页版的歌单,在 https://music.163.com/#/playlist?id= 页添加 备份歌单 的红色按钮
// ==UserScript== // @name download163musiclist // @namespace http://tampermonkey.net/ // @version 2024-04-17 // @description 用于备份网易云音乐网页版的歌单,在 https://music.163.com/#/playlist?id= 页添加 备份歌单 的红色按钮 // @author xueque // @license MIT // @match *://music.163.com/playlist?* // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js // @icon https://s1.music.126.net/style/favicon.ico // @grant none // @run-at document-start // @connect * // ==/UserScript== !function () { 'use strict'; // 获取歌单信息 function get_playlist_information(dom) { const song_sheet = [] // 获得歌单 table 的全部 tr 行 const rows = dom.querySelector('tbody').rows //遍历取得歌曲信息,并格式化 for (let i = 0; i < rows.length; i++) { const info = {} const td_list = rows[i].getElementsByTagName('td') info.id = td_list[0]?.innerText info.title = td_list[1]?.querySelector('b')?.title info.duration = td_list[2]?.querySelector('span')?.innerText info.singer = td_list[3]?.querySelector('div')?.title info.album = td_list[4]?.querySelector('a')?.title song_sheet.push(info) } return song_sheet } // 保存到文件 function saveAsText(name, str) { // 定义保存的文件格式 const blob = new Blob([str], {type: "text/plain;charset=utf-8"}); // 保存到文件 saveAs(blob, `${name}.txt`); } // 构建歌单 function download_playlist(dom) { // 定义歌单格式转换方案 const format = (info) => `${info.id}: ${info.title} - ${info.singer}` // 转换歌单信息为字符串 const list_str = get_playlist_information(dom).map(item => format(item)).join('') // console.log(list_str) // 得到歌单名 const sheet_name = dom.querySelector('.f-ff2').innerText // console.log(sheet_name) saveAsText(sheet_name, list_str) } // 创建按钮 const creat_button = (txt,id="my_download_button") => { // 注入一个下载歌单的按钮 const button = document.createElement("button") button.innerHTML = txt button.setAttribute('id', id) button.setAttribute('class', `more`) button.setAttribute('style', `margin-right:15px;background-color: red;color: white;`) return button } // 移除 function remove_el(el_id_array = []) { el_id_array.forEach(id => { const el = document.getElementById(id) if (el) el.remove() }) } // 注入按钮 function inject_button() { console.log("添加自定义按钮") // 未进入 playlist 页面,等待1s后重新检测 const is_right_page = window.location.href.includes('playlist?') // 如果没有 element,等待1s后重新检测 const topWin = window.top.document.getElementById('g_iframe')?.contentWindow const element = topWin?.document.querySelector('.u-title,.u-title-1.f-cb') if (!is_right_page || !element) { setTimeout(() => inject_button(), 1000) } else { // 如果存在,先移除 remove_el(["my_download_button"]) const button = creat_button("备份歌单") button.addEventListener('click', (e) => { download_playlist(topWin.document) e.preventDefault() }) element.appendChild(button) } } inject_button() }();