您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
提取页面中的磁力链接并收集到文本框中,支持跨网页收集,文本框内容实时更新。快捷键:监测当前页面(Alt+Q),删除当前链接(Alt+W),清除全部(Alt+A),一键复制(Alt+S),展开/关闭(无快捷键)。
当前为
// ==UserScript== // @name MG-Linkcollector // @namespace http://tampermonkey.net/ // @version 1.0 // @description 提取页面中的磁力链接并收集到文本框中,支持跨网页收集,文本框内容实时更新。快捷键:监测当前页面(Alt+Q),删除当前链接(Alt+W),清除全部(Alt+A),一键复制(Alt+S),展开/关闭(无快捷键)。 // @author 黄萌萌可爱多 // @match *://*/* // @license MIT // @grant GM_registerMenuCommand // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function() { 'use strict'; // 提取磁力链接 function extractMagnetLinks() { var magnetLinks = []; var linkElements = document.getElementsByTagName('a'); for (var i = 0; i < linkElements.length; i++) { var linkElement = linkElements[i]; var link = linkElement.href; if (link.startsWith('magnet:')) { magnetLinks.push(link); } } var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false); while (walker.nextNode()) { var node = walker.currentNode; var text = node.textContent.trim(); if (text.startsWith('magnet:')) { magnetLinks.push(text); } } return magnetLinks; } // 从localStorage中获取已保存的磁力链接 function getSavedMagnetLinks() { var savedLinks = localStorage.getItem('magnetLinks'); return savedLinks ? JSON.parse(savedLinks) : []; } // 将新的磁力链接保存到localStorage function saveMagnetLinks(magnetLinks) { var savedLinks = getSavedMagnetLinks(); var combinedLinks = Array.from(new Set([...savedLinks, ...magnetLinks])); try { localStorage.setItem('magnetLinks', JSON.stringify(combinedLinks)); } catch (e) { if (e instanceof DOMException && e.code === 22) { console.warn('localStorage空间不足,正在清理旧数据...'); var maxLinks = 100; if (combinedLinks.length > maxLinks) { combinedLinks = combinedLinks.slice(-maxLinks); } localStorage.setItem('magnetLinks', JSON.stringify(combinedLinks)); console.log('清理完成,现在可以继续保存新数据。'); } else { throw e; } } } // 删除当前页面的磁力链接 function deleteCurrentPageLinks(currentLinks) { var savedLinks = getSavedMagnetLinks(); var updatedLinks = savedLinks.filter(link => !currentLinks.includes(link)); localStorage.setItem('magnetLinks', JSON.stringify(updatedLinks)); } // 清除所有磁力链接 function clearAllLinks() { localStorage.removeItem('magnetLinks'); } // 获取文本框的显示状态 function getTextBoxDisplayState() { return localStorage.getItem('textBoxDisplayState') || 'none'; } // 设置文本框的显示状态 function setTextBoxDisplayState(state) { localStorage.setItem('textBoxDisplayState', state); } // 创建文本框和悬浮按钮 function createTextBoxAndButtons() { var textBox = document.createElement('textarea'); textBox.id = 'magnetLinksBox'; textBox.style.position = 'fixed'; textBox.style.bottom = '200px'; textBox.style.right = '10px'; textBox.style.width = '300px'; textBox.style.height = '200px'; textBox.style.zIndex = '9999'; textBox.placeholder = '提取的磁力链接将显示在这里...'; textBox.style.display = getTextBoxDisplayState(); // 根据保存的状态设置显示或隐藏 var toggleButton = document.createElement('button'); toggleButton.id = 'toggleLinksBoxButton'; toggleButton.style.position = 'fixed'; toggleButton.style.bottom = '10px'; toggleButton.style.right = '10px'; toggleButton.style.width = '100px'; toggleButton.style.height = '40px'; toggleButton.style.zIndex = '9999'; toggleButton.style.background = '#4CAF50'; toggleButton.style.color = 'white'; toggleButton.style.border = 'none'; toggleButton.style.borderRadius = '5px'; toggleButton.style.cursor = 'pointer'; toggleButton.style.fontSize = '14px'; toggleButton.textContent = '展开/关闭'; toggleButton.addEventListener('click', function() { var textBox = document.getElementById('magnetLinksBox'); if (textBox.style.display === 'none') { var savedLinks = getSavedMagnetLinks(); textBox.value = savedLinks.map((link, index) => `${index + 1}. ${link}`).join('\n'); textBox.style.display = 'block'; setTextBoxDisplayState('block'); // 保存显示状态 } else { textBox.style.display = 'none'; setTextBoxDisplayState('none'); // 保存隐藏状态 } }); var deleteCurrentButton = document.createElement('button'); deleteCurrentButton.id = 'deleteCurrentLinksButton'; deleteCurrentButton.style.position = 'fixed'; deleteCurrentButton.style.bottom = '60px'; deleteCurrentButton.style.right = '10px'; deleteCurrentButton.style.width = '100px'; deleteCurrentButton.style.height = '40px'; deleteCurrentButton.style.zIndex = '9999'; deleteCurrentButton.style.background = '#FF9800'; deleteCurrentButton.style.color = 'white'; deleteCurrentButton.style.border = 'none'; deleteCurrentButton.style.borderRadius = '5px'; deleteCurrentButton.style.cursor = 'pointer'; deleteCurrentButton.style.fontSize = '14px'; deleteCurrentButton.textContent = '删除当前链接'; deleteCurrentButton.addEventListener('click', function() { var currentLinks = extractMagnetLinks(); deleteCurrentPageLinks(currentLinks); var textBox = document.getElementById('magnetLinksBox'); textBox.value = getSavedMagnetLinks().join('\n'); }); var copyButton = document.createElement('button'); copyButton.id = 'copyLinksButton'; copyButton.style.position = 'fixed'; copyButton.style.bottom = '110px'; copyButton.style.right = '10px'; copyButton.style.width = '100px'; copyButton.style.height = '40px'; copyButton.style.zIndex = '9999'; copyButton.style.background = '#2196F3'; copyButton.style.color = 'white'; copyButton.style.border = 'none'; copyButton.style.borderRadius = '5px'; copyButton.style.cursor = 'pointer'; copyButton.style.fontSize = '14px'; copyButton.textContent = '一键复制'; copyButton.addEventListener('click', function() { var textBox = document.getElementById('magnetLinksBox'); var linksWithNumbers = textBox.value.split('\n'); var plainLinks = linksWithNumbers.map(link => link.split('. ').slice(1).join('. ')).filter(link => link); textBox.value = plainLinks.join('\n'); textBox.select(); document.execCommand('copy'); alert('已复制所有链接到剪贴板!'); var savedLinks = getSavedMagnetLinks(); textBox.value = savedLinks.map((link, index) => `${index + 1}. ${link}`).join('\n'); }); var clearAllButton = document.createElement('button'); clearAllButton.id = 'clearAllLinksButton'; clearAllButton.style.position = 'fixed'; clearAllButton.style.bottom = '160px'; clearAllButton.style.right = '10px'; clearAllButton.style.width = '100px'; clearAllButton.style.height = '40px'; clearAllButton.style.zIndex = '9999'; clearAllButton.style.background = '#F44336'; clearAllButton.style.color = 'white'; clearAllButton.style.border = 'none'; clearAllButton.style.borderRadius = '5px'; clearAllButton.style.cursor = 'pointer'; clearAllButton.style.fontSize = '14px'; clearAllButton.textContent = '清除全部'; clearAllButton.addEventListener('click', function() { clearAllLinks(); var textBox = document.getElementById('magnetLinksBox'); textBox.value = ''; }); var monitorCurrentButton = document.createElement('button'); monitorCurrentButton.id = 'monitorCurrentLinksButton'; monitorCurrentButton.style.position = 'fixed'; monitorCurrentButton.style.bottom = '210px'; monitorCurrentButton.style.right = '10px'; monitorCurrentButton.style.width = '100px'; monitorCurrentButton.style.height = '40px'; monitorCurrentButton.style.zIndex = '9999'; monitorCurrentButton.style.background = '#008CBA'; monitorCurrentButton.style.color = 'white'; monitorCurrentButton.style.border = 'none'; monitorCurrentButton.style.borderRadius = '5px'; monitorCurrentButton.style.cursor = 'pointer'; monitorCurrentButton.style.fontSize = '14px'; monitorCurrentButton.textContent = '监测当前页面'; monitorCurrentButton.addEventListener('click', function() { var newMagnetLinks = extractMagnetLinks(); saveMagnetLinks(newMagnetLinks); var textBox = document.getElementById('magnetLinksBox'); if (textBox.style.display !== 'none') { var savedLinks = getSavedMagnetLinks(); textBox.value = savedLinks.map((link, index) => `${index + 1}. ${link}`).join('\n'); } }); document.body.appendChild(textBox); document.body.appendChild(toggleButton); document.body.appendChild(deleteCurrentButton); document.body.appendChild(copyButton); document.body.appendChild(clearAllButton); document.body.appendChild(monitorCurrentButton); } // 绑定快捷键 function bindHotkeys() { document.addEventListener('keydown', function(event) { if (event.altKey) { switch (event.key.toLowerCase()) { case 'q': document.getElementById('monitorCurrentLinksButton').click(); break; case 'w': document.getElementById('deleteCurrentLinksButton').click(); break; case 'a': document.getElementById('clearAllLinksButton').click(); break; case 's': document.getElementById('copyLinksButton').click(); break; } } }); } // 使用 MutationObserver 监听 DOM 变化 var observer = new MutationObserver(function(mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList' || mutation.type === 'attributes') { var newMagnetLinks = extractMagnetLinks(); saveMagnetLinks(newMagnetLinks); } } }); var config = { childList: true, subtree: true, attributes: true, characterData: true }; observer.observe(document.body, config); // 确保每次页面加载时都提取并保存磁力链接 setTimeout(function() { var newMagnetLinks = extractMagnetLinks(); saveMagnetLinks(newMagnetLinks); var textBox = document.getElementById('magnetLinksBox'); if (textBox.style.display !== 'none') { var savedLinks = getSavedMagnetLinks(); textBox.value = savedLinks.map((link, index) => `${index + 1}. ${link}`).join('\n'); } }, 2000); // 2秒后执行 // 检查当前页面是否在允许的网站列表中 function isAllowedSite() { var currentUrl = window.location.href; var allowedSites = GM_getValue('allowedSites', '').split('\n').map(site => site.trim()).filter(site => site); var allowAllSites = GM_getValue('allowAllSites', true); if (allowAllSites) { return true; } for (var site of allowedSites) { if (currentUrl.startsWith(site)) { return true; } } return false; } // 设置菜单命令 GM_registerMenuCommand('设置', function() { var hideButtons = GM_getValue('hideButtons', false); var version = GM_info.script.version; // 获取插件版本号 var author = GM_info.script.author; // 获取插件作者信息 var allowedSites = GM_getValue('allowedSites', ''); // 获取允许的网站列表 var allowAllSites = GM_getValue('allowAllSites', true); // 默认允许所有网站 var html = ` <div style="padding: 30px; background-color: white; border: 1px solid #ccc; border-radius: 8px; box-shadow: 0 2px 30px rgba(0, 0, 0, 0.1); width: 400px; height: 300px; font-size: 18px;"> <h2>设置</h2> <p>作者: ${author}</p> <p>版本: ${version}</p> <label style="display: flex; align-items: center;"> <span style="margin-right: 10px;">隐藏悬浮按钮</span> <label class="switch"> <input type="checkbox" id="hideButtonsCheckbox" ${hideButtons ? 'checked' : ''}> <span class="slider round"></span> </label> </label> <br> <label style="display: flex; align-items: center;"> <span style="margin-right: 10px;">允许适用脚本于任何网站</span> <label class="switch"> <input type="checkbox" id="allowAllSitesCheckbox" ${allowAllSites ? 'checked' : ''}> <span class="slider round"></span> </label> </label> <br> <label style="display: flex; align-items: center;"> <span style="margin-right: 10px;">仅允许用该脚本的网站(每行一个URL)</span> <textarea id="allowedSitesTextarea" style="width: 300px; height: 100px;">${allowedSites}</textarea> </label> <br> <button id="saveSettingsButton" style="margin-top: 20px; padding: 10px 20px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px;">保存</button> <button id="closeSettingsButton" style="margin-top: 10px; padding: 10px 20px; background-color: #F44336; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px;">关闭</button> </div> `; var div = document.createElement('div'); div.innerHTML = html; div.style.position = 'fixed'; div.style.top = '50%'; div.style.left = '50%'; div.style.transform = 'translate(-50%, -50%)'; div.style.zIndex = '10000'; document.body.appendChild(div); document.getElementById('saveSettingsButton').addEventListener('click', function() { var hideButtonsCheckbox = document.getElementById('hideButtonsCheckbox'); GM_setValue('hideButtons', hideButtonsCheckbox.checked); var allowAllSitesCheckbox = document.getElementById('allowAllSitesCheckbox'); GM_setValue('allowAllSites', allowAllSitesCheckbox.checked); var allowedSitesTextarea = document.getElementById('allowedSitesTextarea'); GM_setValue('allowedSites', allowedSitesTextarea.value); // 更新按钮显示状态 var toggleButton = document.getElementById('toggleLinksBoxButton'); var deleteCurrentButton = document.getElementById('deleteCurrentLinksButton'); var copyButton = document.getElementById('copyLinksButton'); var clearAllButton = document.getElementById('clearAllLinksButton'); if (hideButtonsCheckbox.checked) { toggleButton.style.display = 'none'; deleteCurrentButton.style.display = 'none'; copyButton.style.display = 'none'; clearAllButton.style.display = 'none'; } else { toggleButton.style.display = 'block'; deleteCurrentButton.style.display = 'block'; copyButton.style.display = 'block'; clearAllButton.style.display = 'block'; } // 关闭设置菜单 document.body.removeChild(div); }); document.getElementById('closeSettingsButton').addEventListener('click', function() { document.body.removeChild(div); }); }); // 主逻辑 if (isAllowedSite()) { var magnetLinks = extractMagnetLinks(); if (magnetLinks.length > 0) { saveMagnetLinks(magnetLinks); } createTextBoxAndButtons(); bindHotkeys(); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址