Greasy Fork

Greasy Fork is available in English.

网页版酷狗音乐下载

网页版酷狗音乐下载,目前仅支持普通音质,可下载vip音乐

当前为 2024-05-23 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         网页版酷狗音乐下载
// @namespace    http://tampermonkey.net/
// @version      1.6
// @description  网页版酷狗音乐下载,目前仅支持普通音质,可下载vip音乐
// @author       Xie
// @match        *://www.kugou.com/**
// @license      使用说明:请看下方描述
// @icon         data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAADkhB4A5IQeWuSEHtjkhB7/5IQe/+SEHv/khB7/5IQe/+SEHv/khB7/5IQe/+SEHv/khB7/5IQe2OSEHlvkhB4A5IQeW+SEHv/khB7/5IQe/+SEHv/khB7Y5IQeh+SEHlvkhB5b5IQehuSEHtXkhB7/5IQe/+SEHv/khB7/5IQeW+SEHtXkhB7/5IQe/+SEHu/khB5c5IQeR+SEHqPkhB7R5IQe0uSEHqTkhB5H5IQeW+SEHu3khB7/5IQe/+SEHtTkhB775IQe/+SEHvTkhB455IQeqOSEHv/khB7/5IQe/+SEHv/khB7/5IQe/+SEHqzkhB445IQe8OSEHv/khB775IQe/+SEHv/khB5e5IQep+SEHv/khB7S5IQe2+SEHv/khB775IQezOSEHs/khB7/5IQeq+SEHlfkhB7/5IQe/+SEHv/khB7Y5IQeROSEHv/khB7/5IQeMeSEHjvkhB7/5IQeguSEHgDkhB6D5IQe/+SEHv/khB5G5IQe2OSEHv/khB7/5IQeiuSEHp/khB7/5IQe/+SEHknkhB4h5IQezeSEHgXkhB5I5IQe/eSEHv/khB7/5IQepOSEHorkhB7/5IQe/+SEHmLkhB7L5IQe/+SEHv/khB5j5IQeBuSEHjjkhB4V5IQe6+SEHv/khB7/5IQe/+SEHs7khB5j5IQe/+SEHv/khB5i5IQeyuSEHv/khB7/5IQefuSEHgDkhB4X5IQeHeSEHu7khB7/5IQe/+SEHv/khB7N5IQeZOSEHv/khB7/5IQejuSEHp7khB7/5IQe/+SEHpbkhB4A5IQeouSEHhbkhB4x5IQe7OSEHv/khB7/5IQep+SEHorkhB7/5IQe/+SEHtzkhB5C5IQe/+SEHv/khB6u5IQeAOSEHrTkhB7W5IQeGeSEHjDkhB7q5IQe/+SEHkfkhB7Z5IQe/+SEHv/khB7/5IQeY+SEHqXkhB7/5IQe8+SEHszkhB7t5IQe/+SEHunkhB7M5IQe5eSEHqrkhB5d5IQe/+SEHv/khB775IQe/+SEHvDkhB455IQep+SEHv/khB7/5IQe/+SEHv/khB7/5IQe/+SEHqrkhB455IQe8OSEHv/khB765IQe1OSEHv/khB7/5IQe8OSEHl/khB5H5IQeouSEHtDkhB7Q5IQeouSEHkvkhB5b5IQe7+SEHv/khB7/5IQe0+SEHlnkhB7/5IQe/+SEHv/khB7/5IQe2OSEHobkhB5e5IQeXOSEHojkhB7Y5IQe/+SEHv/khB7/5IQe/+SEHlnkhB4A5IQeWuSEHtbkhB7+5IQe/+SEHv/khB7/5IQe/+SEHv/khB7/5IQe/+SEHv/khB7+5IQe1uSEHlrkhB4AgAEAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAACAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==
// @grant        none
// ==/UserScript==
(function() {
  'use strict';

  if (!('speechSynthesis' in window)) {
    throw alert("对不起,您的浏览器不支持")
  }
  setTimeout(function() {
    var audioElement = document.getElementById('myAudio');
    if (!audioElement) {
      console.log('没用找到音频元素,无法下载')
      return;
    }
    loadButton();

    // 使用MutationObserver来监视src属性的变化
    const observer = new MutationObserver(mutationsList => {
      for(let mutation of mutationsList) {
        if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
          // 检查是否存在 id 为 "downloadLink" 的元素,如果存在则删除
          var existingDownloadLink = document.getElementById('downloadLink-parent');
          if (existingDownloadLink) {
            existingDownloadLink.parentNode.removeChild(existingDownloadLink);
          }
          setTimeout(function() {
            loadButton();
          }, 500);
          break;
        }
      }
    });

    // 监听音频元素的src属性变化
    observer.observe(audioElement, { attributes: true });
  }, 1500);


  function loadButton() {
    var audioElement = document.getElementById('myAudio');
    if (!audioElement) {
      console.log('没用找到音频元素,无法下载')
      return;
    }

    // 创建一个新的div元素
    const floatingDiv = document.createElement("div");
    floatingDiv.setAttribute('id', 'downloadLink-parent');
    floatingDiv.innerHTML = `
        <div id="downloadLink">

        </div>

      <style>
      #downloadLink {
        position: fixed;
        bottom: 20px;
        right: 20px;
        padding: 10px 20px;
        color: #fff;
        text-decoration: none;
        border-radius: 5px;
        cursor: pointer;
        z-index: 99999;
        border: 1px solid #fff;
        background-color: #8d332c;
      }

      #downloadLink:hover {
        filter: brightness(1.5); /* 改变亮度以更改整个SVG的颜色 */
        transition: filter 0.3s; /* 添加过渡效果 */
      }
    </style>

  `;
    document.body.appendChild(floatingDiv);

    // 获得音频下载地址
    var audioSource = audioElement.src;

    // 获取音频文件名
    var nameEle = document.querySelector('#songName');
    if (nameEle == null) {
      nameEle = document.querySelector('.audioName');
    }
    var songNameText = truncateText((nameEle != null ? nameEle.textContent : '未知') + '.mp3', 25);

    const downloadLink = document.getElementById("downloadLink");

    // 设置 <div> 标签的文本内容
    downloadLink.textContent = "点击下载:" + songNameText;
    console.log("下载地址:", audioSource)
    console.log("文件名称:", songNameText)

    downloadLink.addEventListener('click', function (event) {
      downFile(audioSource, songNameText)
    });
  }

  function downFile(url, name) {
    // 创建一个 XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();

    // 监听 XMLHttpRequest 的 readyState 属性的变化
    xhr.onreadystatechange = function () {
      // 当 readyState 变为 4 且状态码为 200 时表示请求成功
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          // 获取服务器响应的数据
          var responseData = xhr.response;

          // 创建一个新的 <a> 标签用于下载
          let aEle = document.createElement('a');
          aEle.href = window.URL.createObjectURL(responseData);
          aEle.download = name; // 设置文件名
          document.body.appendChild(aEle);

          // 触发点击事件,开始下载文件
          aEle.click();

          // 下载完成后移除链接元素
          document.body.removeChild(aEle);
        }
        else {
          alert('下载失败,请在新打开的标签页中点击鼠标右键,然后选择“将音频另存为”\n如果没有发现新标签,请注意当前标签的地址栏是否有被阻止的情况\n如果有被阻止');
          let aEle = document.createElement('a');
          aEle.href = url;
          aEle.target = '_blank'
          aEle.download = name; // 设置文件名
          document.body.appendChild(aEle);
          // 触发点击事件,开始下载文件
          aEle.click();

          // 下载完成后移除链接元素
          document.body.removeChild(aEle);
        }

      }
    };
    // 发送 HTTP GET 请求
    xhr.open('GET', url, true);
    xhr.responseType = 'blob'; // 设置响应类型为 blob
    xhr.send();
  }
function truncateText(text, maxLength) {
  if (text.length <= maxLength) {
    return text; // 如果文本长度小于等于最大长度,直接返回原文本
  } else {
    const startLength = Math.ceil((maxLength - 3) / 2); // 开头保留的字符数
    const endLength = Math.floor((maxLength - 3) / 2); // 结尾保留的字符数
    return text.slice(0, startLength) + '...' + text.slice(text.length - endLength); // 将开头和结尾的字符拼接在一起,中间用省略号表示
  }
}
})();