您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Collect links from fitgirl fuckingfast paste page which contains all the link and automatically start the download
// ==UserScript== // @name Auto Link Collector and Downloader // @namespace Violentmonkey Scripts // @version 1.1 // @description Collect links from fitgirl fuckingfast paste page which contains all the link and automatically start the download // @author OrekiKun // @match https://paste.fitgirl-repacks.site/* // @match https://fuckingfast.co/* // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @run-at document-idle // @license MIT // ==/UserScript== (function() { 'use strict'; console.log('Script loaded successfully!'); // Add CSS styles using GM_addStyle (bypasses CSP) GM_addStyle(` #download-control-panel { position: fixed !important; top: 10px !important; right: 10px !important; background: white !important; border: 2px solid #333 !important; border-radius: 8px !important; padding: 15px !important; box-shadow: 0 4px 12px rgba(0,0,0,0.3) !important; z-index: 999999 !important; max-width: 300px !important; font-family: Arial, sans-serif !important; font-size: 14px !important; } .dl-panel-title { margin: 0 0 10px 0 !important; color: #333 !important; font-size: 16px !important; font-weight: bold !important; } .dl-panel-info { margin: 5px 0 !important; color: #666 !important; } .dl-btn { border: none !important; padding: 8px 16px !important; border-radius: 4px !important; cursor: pointer !important; margin-right: 5px !important; font-size: 12px !important; } .dl-btn-start { background: #4CAF50 !important; color: white !important; } .dl-btn-close { background: #f44336 !important; color: white !important; } .dl-status { margin-top: 10px !important; font-size: 12px !important; color: #666 !important; } .dl-indicator { position: fixed !important; top: 10px !important; left: 10px !important; background: #4CAF50 !important; color: white !important; padding: 10px !important; border-radius: 4px !important; z-index: 999999 !important; font-family: Arial, sans-serif !important; } `); // Configuration const CONFIG = { sourceSelector: '#plaintext ul li a', downloadButtonSelector: 'button.link-button.text-5xl.gay-button', downloadDelay: 3000, tabCloseDelay: 5000 }; // Check if we're on the source page function isSourcePage() { const hasElement = document.querySelector('#plaintext ul') !== null; console.log('Checking for #plaintext ul:', hasElement); return hasElement; } // Check if we're on a download page function isDownloadPage() { const hasButton = document.querySelector(CONFIG.downloadButtonSelector) !== null; console.log('Checking for download button:', hasButton); return hasButton; } // Collect all links from the source page function collectLinks() { const links = []; const linkElements = document.querySelectorAll(CONFIG.sourceSelector); console.log('Found link elements:', linkElements.length); linkElements.forEach(function(link, index) { if (link.href) { links.push({ url: link.href, text: link.textContent.trim() }); console.log('Link ' + (index + 1) + ':', link.href); } }); return links; } // Create control panel function createControlPanel(links) { console.log('Creating control panel...'); // Remove existing panel if any const existingPanel = document.getElementById('download-control-panel'); if (existingPanel) { existingPanel.remove(); } const panel = document.createElement('div'); panel.id = 'download-control-panel'; const title = document.createElement('h3'); title.className = 'dl-panel-title'; title.textContent = '🚀 Link Downloader'; const info = document.createElement('p'); info.className = 'dl-panel-info'; info.textContent = 'Found ' + links.length + ' links'; const startBtn = document.createElement('button'); startBtn.id = 'start-download'; startBtn.className = 'dl-btn dl-btn-start'; startBtn.textContent = 'Start Downloads'; const closeBtn = document.createElement('button'); closeBtn.id = 'close-panel'; closeBtn.className = 'dl-btn dl-btn-close'; closeBtn.textContent = 'Close'; const status = document.createElement('div'); status.id = 'download-status'; status.className = 'dl-status'; panel.appendChild(title); panel.appendChild(info); panel.appendChild(startBtn); panel.appendChild(closeBtn); panel.appendChild(status); document.body.appendChild(panel); console.log('Panel added to body'); // Add event listeners startBtn.addEventListener('click', function() { console.log('Start button clicked'); startDownloadProcess(links); }); closeBtn.addEventListener('click', function() { console.log('Close button clicked'); panel.remove(); }); } // Start download process function startDownloadProcess(links) { const statusDiv = document.getElementById('download-status'); let currentIndex = 0; function processNextLink() { if (currentIndex >= links.length) { statusDiv.textContent = '✓ All downloads completed!'; statusDiv.style.color = 'green'; return; } const link = links[currentIndex]; statusDiv.textContent = 'Processing ' + (currentIndex + 1) + '/' + links.length + ': ' + link.text; GM_setValue('currentDownload', JSON.stringify({ url: link.url, index: currentIndex, total: links.length })); GM_openInTab(link.url, { active: false, insert: true }); currentIndex++; setTimeout(processNextLink, 2000); } processNextLink(); } // Handle download page function handleDownloadPage() { const downloadInfo = GM_getValue('currentDownload'); if (!downloadInfo) return; const info = JSON.parse(downloadInfo); setTimeout(function() { const downloadButton = document.querySelector(CONFIG.downloadButtonSelector); if (downloadButton) { console.log('Download button found, clicking...'); const indicator = document.createElement('div'); indicator.className = 'dl-indicator'; indicator.textContent = 'Auto-downloading... (' + (info.index + 1) + '/' + info.total + ')'; document.body.appendChild(indicator); downloadButton.click(); setTimeout(function() { window.close(); }, CONFIG.tabCloseDelay); } else { console.log('Download button not found'); setTimeout(function() { window.close(); }, 2000); } }, CONFIG.downloadDelay); } // Debug function to check page structure function debugPage() { console.log('=== PAGE DEBUG ==='); console.log('URL:', window.location.href); // Check for plaintext div const plaintextDiv = document.querySelector('#plaintext'); console.log('Has #plaintext div:', !!plaintextDiv); if (plaintextDiv) { const ul = plaintextDiv.querySelector('ul'); console.log('Has ul inside #plaintext:', !!ul); if (ul) { const lis = ul.querySelectorAll('li'); const links = ul.querySelectorAll('li a'); console.log('Li elements:', lis.length); console.log('Links in li elements:', links.length); } } // Alternative selectors to try console.log('All divs with plaintext-related ids:'); document.querySelectorAll('[id*="plaintext"], [id*="plain"], [class*="plaintext"]').forEach(function(el) { console.log('Found element:', el.tagName, el.id, el.className); }); console.log('=== END DEBUG ==='); } // Initialize script function init() { console.log('Initializing script...'); debugPage(); if (isSourcePage()) { console.log('Source page detected'); const links = collectLinks(); if (links.length > 0) { createControlPanel(links); console.log('Created panel with ' + links.length + ' links'); } else { console.log('No links found in #plaintext ul li a'); // Try alternative approach - show panel anyway for testing createControlPanel([]); } } else if (isDownloadPage()) { console.log('Download page detected'); handleDownloadPage(); } else { console.log('Neither source nor download page detected'); // For debugging - show what we can find debugPage(); } } // Multiple initialization attempts if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { setTimeout(init, 1000); } // Also try when window loads window.addEventListener('load', function() { setTimeout(init, 2000); }); })();