您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Collects magnet/ed2k links and provides copy to clipboard.
// ==UserScript== // @name Download Link Collector // @namespace dlc // @version 0.1.0 // @description Collects magnet/ed2k links and provides copy to clipboard. // @author wzzzzz // @license MIT // @include *://*javbus.com/* // @include *://www.*bus*/* // @include *://www.*javsee*/* // @include *://www.*seejav*/* // @include *://www.south-plus.net/* // @include *://*sehuatang.net/* // @include *://*onejav.com/* // @include *://*avsox.*/* // @include *://*jav321.com/video/* // @grant GM_setClipboard // ==/UserScript== (function() { 'use strict'; // 收集磁力链接 function collectLinks() { function traverseDOM(element) { let downloadLinks = []; if (element.nodeType === Node.TEXT_NODE) { // 如果当前节点是文本节点,则在文本中查找链接 let innerText = element.nodeValue; let collect_str = collect(innerText); if (collect_str && collect_str.length) downloadLinks = downloadLinks.concat(collect_str); } else if (element.tagName === 'LI') { let collect_str = collect(element.innerHTML); if (collect_str && collect_str.length) downloadLinks = downloadLinks.concat(collect_str); } else if (element.nodeType === Node.ELEMENT_NODE) { // 如果当前节点是元素节点,则递归遍历其子元素 for (let i = 0; i < element.childNodes.length; i++) { downloadLinks = downloadLinks.concat(traverseDOM(element.childNodes[i])); } } return downloadLinks; } // 提取链接 function collect(link_str) { if (!link_str) return ''; let result = ''; let pattern = /(magnet:\?xt=urn:btih:)[0-9a-fA-F]{40}/g; let pattern_lite = /[0-9a-fA-F]{40}[\s]?/g; let pattern_ed2k = /ed2k:\/\/\|file\|.+\|\//g; let matches = link_str.match(pattern); let matches_ed2k = link_str.match(pattern_ed2k); if (matches) { result = matches; } else if (matches_ed2k) { result = matches_ed2k; } else { let lites = link_str.match(pattern_lite); if (lites) { lites = lites.map(str => `magnet:?xt=urn:btih:${str.replace(/^\s*|\s*$/g, '')}`); result = lites; } } return result } // 链接去重 function unique(arr) { let result = []; let obj = {}; for (let i = 0; i < arr.length; i++) { let str = arr[i].toLowerCase(); if (!obj[str]) { result.push(arr[i]); obj[str] = true; } } return result; } // 获取 <body> 元素 let bodyElement = document.getElementsByTagName('body')[0]; // 遍历 <body> 元素的所有子元素,并查找链接 let downloadLinks = unique(traverseDOM(bodyElement)); let linksText = downloadLinks.join("\n"); console.log(downloadLinks); // 复制链接到剪贴板 if (downloadLinks.length > 0) { let copyButton = document.createElement('button'); copyButton.textContent = `Copy ${downloadLinks.length} Links`; copyButton.style.position = 'fixed'; copyButton.style.bottom = '20px'; copyButton.style.right = '20px'; copyButton.style.zIndex = '9999'; document.body.appendChild(copyButton); copyButton.addEventListener('click', function() { navigator.clipboard.writeText(linksText).then(function() { alert('Links copied to clipboard!'); }).catch(function(error) { console.error('Failed to copy links to clipboard:', error); }); }); } } // 页面加载完成后收集磁力链接 window.addEventListener('load', function() { collectLinks(); }); })();