Greasy Fork

Greasy Fork is available in English.

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

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

当前为 2023-09-04 提交的版本,查看 最新版本

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

(function() {
  'use strict';

  // 创建复制字幕按钮
  function createCopySubtitleButton() {
    const btn = document.createElement('button');
    btn.id = 'copySubtitleBtn';
    btn.innerText = '复制字幕';
    btn.style = 'position: fixed; left: 40px; bottom: 20px; z-index: 9999; padding: 10px; background: #fff; border: 1px solid #ccc; cursor: pointer;';
    // 复制字幕按钮点击事件处理函数
    btn.addEventListener('click', function() {
      const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); // 获取所有段落元素
      if (subtitleElements.length === 0) {
       btn.innerText = '无字幕';
     // alert('无法获取字幕');

        return;
      }
      const subtitleText = [];
      for (let i = 0; i < subtitleElements.length; i++) {
        subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中
      }
      navigator.clipboard.writeText(subtitleText.join('\n\n')).then(function() {
        btn.innerText = '已复制';
        //alert('字幕已复制');
      });
    });
    document.body.appendChild(btn);
  }

  // 创建导出文稿doc按钮
  function createExportToDocButton() {
    const btn = document.createElement('button');
    btn.id = 'exportToDocBtn';
    btn.innerText = '导出文稿doc';
    btn.style = 'position: fixed; left: 120px; bottom: 20px; z-index: 9999; padding: 10px; background: #fff; border: 1px solid #ccc; cursor: pointer;';
    // 导出文稿doc按钮点击事件处理函数
    btn.addEventListener('click', function() {
      const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); // 获取所有段落元素
      if (subtitleElements.length === 0) {
          btn.innerText = '无字幕';
        //alert('无法获取字幕');
        return;
      }
      const subtitleText = [];
      for (let i = 0; i < subtitleElements.length; i++) {
        subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中
      }
      const subtitle = subtitleText.join('\n\n'); // 获取字幕内容
      const filename = getDefaultFilename('.doc');
      var blob = new Blob([subtitle], { type: 'text/plain;charset=utf-8' });
      saveAs(blob, filename); // 使用FileSaver.js保存文件
      btn.innerText = '已导doc';
      //alert('导出成功');
    });
    document.body.appendChild(btn);
  }

  // 创建导出字幕srt按钮
  function createExportToSrtButton() {
    const btn = document.createElement('button');
    btn.id = 'exportToSrtBtn';
    btn.innerText = '导出字幕srt';
    btn.style = 'position: fixed; left: 220px; bottom: 20px; z-index: 9999; padding: 10px; background: #fff; border: 1px solid #ccc; cursor: pointer;';
    // 导出字幕srt按钮点击事件处理函数
    btn.addEventListener('click', function() {
      const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); // 获取所有段落元素
      if (subtitleElements.length === 0) {
          btn.innerText = '无字幕';
        //alert('无法获取字幕');
        return;
      }
      const subtitleText = [];
      for (let i = 0; i < subtitleElements.length; i++) {
        subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中
      }
      const blobArray = [];
      for (let i = 0; i < subtitleText.length; i++) {
        const srtText =
          (i + 1) + '\n' +
          '00:00:00,000 --> 00:00:01,000\n' +
          subtitleText[i] + '\n\n';
        const srtBlob = new Blob([srtText], { type: 'text/plain;charset=utf-8' });
        blobArray.push(srtBlob);
      }
      var combinedBlob = new Blob(blobArray, { type: 'text/plain;charset=utf-8' });
      saveAs(combinedBlob, getDefaultFilename('.srt'));
      btn.innerText = '已导srt';
      //alert('导出成功');
    });
    document.body.appendChild(btn);
  }

  // 在页面加载完成后创建按钮
  window.addEventListener('load', function() {
    createCopySubtitleButton();
    createExportToDocButton();
    createExportToSrtButton();
  });

  // 获取默认文件名
  function getDefaultFilename(extension) {
    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(/\.[^/.]+$/, '') + extension; // 去掉原始文件名的后缀,并添加新的后缀名
      return newFilename;
    }
    return 'subtitle' + extension;
  }

})();