Greasy Fork

Greasy Fork is available in English.

🔥【就是爽】某度网盘添加复制字幕按钮+导出doc按钮(360和chrome均已测试)

在某度网盘中添加复制字幕按钮,并实现复制字幕和导出为doc的功能,按钮名字随操作状态变化(比如没有下载之前,按钮名字为复制字幕,复制后,按钮名字为字幕已复制)

当前为 2023-08-02 提交的版本,查看 最新版本

// ==UserScript==
// @name         🔥【就是爽】某度网盘添加复制字幕按钮+导出doc按钮(360和chrome均已测试)
// @namespace    your-namespace
// @version      2.2
// @description  在某度网盘中添加复制字幕按钮,并实现复制字幕和导出为doc的功能,按钮名字随操作状态变化(比如没有下载之前,按钮名字为复制字幕,复制后,按钮名字为字幕已复制)
// @license       Yolanda Morgan
// @author       Your Name
// @match        https://pan.baidu.com/*
// @exclude       *://pan.baidu.com/disk/*
// @exclude       *://pan.baidu.com/s/*
// @grant        GM_setClipboard
// @require      https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js
// ==/UserScript==

(function() {
  'use strict';

  // 启用body编辑
  document.body.contentEditable = true;

  // 创建复制字幕按钮
  function createCopySubtitleButton() {
    var btn = document.createElement('button');
    btn.id = 'copySubtitleBtn';
    btn.innerText = '复制字幕';
    btn.style.position = 'fixed';
    btn.style.left = '20px';
    btn.style.bottom = '20px';
    btn.style.zIndex = '9999';
    btn.style.padding = '10px';
    btn.style.backgroundColor = '#fff';
    btn.style.border = '1px solid #ccc';
    btn.style.cursor = 'pointer';

    // 复制字幕按钮点击事件处理函数
    btn.addEventListener('click', function() {
      var subtitle = getSubtitle(); // 获取字幕内容
      if (subtitle) {
        GM_setClipboard(subtitle); // 复制字幕到剪贴板
        btn.innerText = '字幕已复制';
      } else {
        btn.innerText = '无法获取字幕';
      }
    });

    document.body.appendChild(btn);
  }

  // 创建导出为doc按钮
  function createExportToDocButton() {
    var btn = document.createElement('button');
    btn.id = 'exportToDocBtn';
    btn.innerText = '导出为doc';
    btn.style.position = 'fixed';
    btn.style.left = '140px';
    btn.style.bottom = '20px';
    btn.style.zIndex = '9999';
    btn.style.padding = '10px';
    btn.style.backgroundColor = '#fff';
    btn.style.border = '1px solid #ccc';
    btn.style.cursor = 'pointer';

    // 导出为doc按钮点击事件处理函数
    btn.addEventListener('click', function() {
      var subtitle = getSubtitle(); // 获取字幕内容
      if (subtitle) {
        var filename = getDefaultFilename();
        var blob = new Blob([subtitle], {type: 'text/plain;charset=utf-8'});

        saveAs(blob, filename); // 使用FileSaver.js保存文件

        btn.innerText = '字幕已导出为doc文件';
      } else {
        btn.innerText = '无法获取字幕';
      }
    });

    document.body.appendChild(btn);
  }

  // 获取字幕内容的逻辑处理代码
  function getSubtitle() {
    var subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); // 获取所有段落元素
    var subtitleText = [];

    for (var i = 0; i < subtitleElements.length; i++) {
      subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中
    }

    return subtitleText.join('\n\n'); // 将字幕数组以空行连接起来并返回
  }

  // 获取默认文件名
  function getDefaultFilename() {
    var videoNameElement = document.querySelector('div.vp-video-page-card span.is-playing.vp-video-page-card__video-name');
    if (videoNameElement) {
      var originalFilename = videoNameElement.innerText.trim();
      var newFilename = originalFilename.replace(/\.[^/.]+$/, '') + '.doc'; // 去掉原始文件名的后缀,并添加新的后缀名
      return newFilename;
    }
    return 'subtitle.doc';
  }

  // 添加复制字幕按钮和导出为doc按钮
  createCopySubtitleButton();
  createExportToDocButton();
})();