您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
在某度网盘中添加复制字幕按钮,并实现复制字幕和导出为doc,srt的功能,按钮名字随操作状态变化(比如没有下载之前,按钮名字为复制字幕,复制后,按钮名字为字幕已复制)
当前为
// ==UserScript== // @name 🔥【就是爽】某度网盘添加复制字幕按钮+导出doc按钮(360和chrome均已测试) // @namespace your-namespace // @version 2.3 // @description 在某度网盘中添加复制字幕按钮,并实现复制字幕和导出为doc,srt的功能,按钮名字随操作状态变化(比如没有下载之前,按钮名字为复制字幕,复制后,按钮名字为字幕已复制) // @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 formatTime(totalSeconds, requireMil = false) { const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = Math.floor(totalSeconds % 60); let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; if (requireMil) { formattedTime += `,${(seconds % 1).toFixed(3).substring(2)}`; } return formattedTime; } // 创建按钮 function createButton(id, buttonText, left, clickHandler) { const button = document.createElement('button'); button.id = id; button.innerText = buttonText; button.style = `position:fixed;left:${left};bottom:20px;z-index:9999;padding:10px;background:#fff;border:1px solid #ccc;cursor:pointer;`; button.addEventListener('click', clickHandler); document.body.appendChild(button); } // 复制字幕按钮点击处理函数 async function copySubtitleButtonClickHandler() { const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); // 获取所有段落元素 const subtitleText = Array.from(subtitleElements).map((el) => el.innerText.trim()).join('\n\n'); // 将每个段落的文本添加到字幕数组中 await copyToClipboard(subtitleText); // 使用空行连接字幕数组并复制到剪贴板 alert('字幕已复制'); } // 导出为DOC按钮点击处理函数 function exportToDocButtonClickHandler() { const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); const subtitleText = Array.from(subtitleElements).map((el) => el.innerText.trim()).join('\n\n'); const subtitle = subtitleText.join('\n\n'); const filename = getDefaultFilename('.doc'); const blob = new Blob([subtitle], { type: 'text/plain;charset=utf-8' }); saveAs(blob, filename); // 使用FileSaver.js保存文件 alert('导出成功'); } // 导出为SRT按钮点击处理函数 function exportToSrtButtonClickHandler() { const subtitleElements = document.querySelectorAll('.ai-draft__wrap-list p.ai-draft__p-paragraph'); const blobArray = Array.from(subtitleElements).map((subtitle, index) => { const srtText = (index + 1) + "\n" + formatTime(subtitle.startTime, true) + " --> " + formatTime(subtitle.endTime, true) + "\n" + subtitle.text + "\n\n"; return new Blob([srtText], { type: "text/plain;charset=utf-8" }); }); const combinedBlob = new Blob(blobArray, { type: "text/plain;charset=utf-8" }); const filename = getDefaultFilename('.srt'); saveAs(combinedBlob, filename); // 使用FileSaver.js保存文件 alert('导出成功'); } // 获取默认的导出文件名 function getDefaultFilename(ext) { 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(/\.[^/.]+$/, '') + ext; // 删除原始文件扩展名并添加新的扩展名 return newFilename; } return `subtitle${ext}`; } // 复制文本到剪贴板 async function copyToClipboard(txt) { try { await navigator.clipboard.writeText(txt); } catch (error) { const input = document.createElement('textarea'); input.setAttribute('readonly', 'readonly'); input.value = txt; document.body.appendChild(input); input.select(); document.execCommand('copy'); document.body.removeChild(input); } } createButton('copySubtitleButton', '复制字幕', '40px', copySubtitleButtonClickHandler); createButton('exportToDocButton', '导出为DOC', '120px', exportToDocButtonClickHandler); createButton('exportToSrtButton', '导出为SRT', '200px', exportToSrtButtonClickHandler); })();