Greasy Fork is available in English.
在某度网盘中添加复制字幕按钮,并实现复制字幕和导出为doc、srt的功能,按钮名字随操作状态变化(比如没有下载之前,按钮名字为复制字幕,复制后,按钮名字为字幕已复制)
Вам также может понравится 🔥【就是爽】【改进版】某度网盘 破解SVIP&&倍速播放&&文稿字幕&&样式&&解锁&&修复自动开启字幕,删广告样式等bug(360+chrome已测)....看网课专用!.
// ==UserScript== // @name 🔥【就是爽】某度网盘添加复制字幕按钮+导出doc按钮(360和chrome均已测试) // @namespace your-namespace // @version 2.4 // @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'); // 获取所有段落元素 const subtitleText = []; for (let i = 0; i < subtitleElements.length; i++) { subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中 } GM_setClipboard(subtitleText.join('\n\n')).then(function() { 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'); // 获取所有段落元素 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'); saveAs(new Blob([subtitle], {type: 'application/msword'}), filename); // 使用saveAs下载文件 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'); // 获取所有段落元素 const subtitleText = []; for (let i = 0; i < subtitleElements.length; i++) { subtitleText.push(subtitleElements[i].innerText.trim()); // 将每个段落的文本添加到字幕数组中 } const srtText = generateSrtText(subtitleText); // 生成srt格式的字幕文本 const filename = getDefaultFilename('.srt'); saveAs(new Blob([srtText], {type: 'application/octet-stream'}), filename); // 使用saveAs下载文件 alert('导出成功'); }); document.body.appendChild(btn); } // 在页面加载完成后创建按钮 window.addEventListener('load', function() { createCopySubtitleButton(); createExportToDocButton(); createExportToSrtButton(); }); // 获取默认文件名 function getDefaultFilename(extension) { const videoNameElement = document.querySelector('div.vp-video-page-card span.is-playing.vp-video-page-card__video-name'); if (videoNameElement) { const originalFilename = videoNameElement.innerText.trim(); const newFilename = originalFilename.replace(/\.[^/.]+$/, '') + extension; // 去掉原始文件名的后缀,并添加新的后缀名 return newFilename; } return 'subtitle' + extension; } // 生成srt格式的字幕文本 function generateSrtText(subtitleText) { let srtText = ''; for (let i = 0; i < subtitleText.length; i++) { const index = i + 1; const startTime = formatTime(i); const endTime = formatTime(i + 1); srtText += `${index}\n${startTime} --> ${endTime}\n${subtitleText[i]}\n\n`; } return srtText; } // 格式化时间为srt格式的时间字符串 function formatTime(index) { const hours = Math.floor(index / 3600); const minutes = Math.floor((index % 3600) / 60); const seconds = index % 60; return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)},000`; } // 在小于10的数字前补零 function padZero(number) { if (number < 10) { return `0${number}`; } return number.toString(); } })();