您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在FitGirl页面上匹配所有fuckingfast.co的链接,并自动在新标签页中点击下载按钮。
// ==UserScript== // @name FitGirl Auto Fuckingfast Downloader Helper // @namespace http://tampermonkey.net/ // @version 1.1 // @description 在FitGirl页面上匹配所有fuckingfast.co的链接,并自动在新标签页中点击下载按钮。 // @author zhangdapaofuckyou // @match https://fitgirl-repacks.site/* // @match https://fuckingfast.co/* // @grant GM_openInTab // @grant window.close // @license MIT // ==/UserScript== (function() { 'use strict'; // --- 主页面逻辑 (fitgirl-repacks.site) --- if (window.location.hostname.includes('fitgirl-repacks.site')) { console.log('[FitGirl助手] 脚本已在主页面启动。'); const checkInterval = setInterval(() => { // 持续检查直到找到链接和可以插入内容的目标位置 const links = document.querySelectorAll('a[href*="fuckingfast.co/"]'); const entryContent = document.querySelector('.entry-content'); // 确保页面上至少有一个符合条件的链接,并且找到了可以插入按钮的区域 if (links.length > 0 && entryContent) { console.log(`[FitGirl助手] 成功找到 ${links.length} 个链接和内容区域,准备创建界面。`); // 找到后就停止检查,防止重复创建 clearInterval(checkInterval); // 避免重复添加,先检查是否已存在 if (document.getElementById('auto-downloader-container')) { return; } // 创建主容器 const linkContainer = document.createElement('div'); linkContainer.id = 'auto-downloader-container'; // 添加ID以便检查 linkContainer.style.marginTop = '20px'; linkContainer.style.marginBottom = '20px'; linkContainer.style.border = '2px solid #4CAF50'; linkContainer.style.borderRadius = '5px'; linkContainer.style.padding = '15px'; linkContainer.style.backgroundColor = '#f0fff0'; // 创建标题 const title = document.createElement('h3'); title.innerText = '自动下载助手'; title.style.marginTop = '0'; linkContainer.appendChild(title); // 创建链接列表容器 const listContainer = document.createElement('div'); listContainer.style.display = 'flex'; listContainer.style.flexDirection = 'column'; listContainer.style.gap = '10px'; links.forEach((link, index) => { const originalUrl = link.href; // 从链接中提取文件名作为按钮文本 const fileName = originalUrl.split('#')[1] || `Part ${index + 1}`; const fileLabel = fileName.replace(/_/g, ' '); // 为每个链接创建带复选框的列表项 const listItem = document.createElement('div'); listItem.style.display = 'flex'; listItem.style.alignItems = 'center'; listItem.style.gap = '8px'; const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.id = `download-item-${index}`; checkbox.value = originalUrl; checkbox.style.cursor = 'pointer'; const label = document.createElement('label'); label.htmlFor = `download-item-${index}`; label.innerText = fileLabel; label.style.cursor = 'pointer'; listItem.appendChild(checkbox); listItem.appendChild(label); listContainer.appendChild(listItem); }); linkContainer.appendChild(listContainer); // 添加一个下载按钮,用于下载所有选中的项 const downloadAllButton = document.createElement('button'); downloadAllButton.innerText = '下载已选内容'; downloadAllButton.style.marginTop = '15px'; downloadAllButton.style.padding = '10px 20px'; downloadAllButton.style.cursor = 'pointer'; downloadAllButton.style.border = '1px solid #4CAF50'; downloadAllButton.style.borderRadius = '5px'; downloadAllButton.style.backgroundColor = '#4CAF50'; downloadAllButton.style.color = 'white'; downloadAllButton.onmouseover = () => downloadAllButton.style.backgroundColor = '#45a049'; downloadAllButton.onmouseout = () => downloadAllButton.style.backgroundColor = '#4CAF50'; // --- 核心修改部分 --- // 使用 async/await 来确保链接按顺序打开 downloadAllButton.onclick = async () => { const checkedItems = document.querySelectorAll('input[type="checkbox"]:checked'); if (checkedItems.length === 0) { // 使用 div 替代 alert showMessage('请先选择要下载的文件!'); return; } // 禁用按钮以防重复点击 downloadAllButton.disabled = true; downloadAllButton.innerText = '正在按顺序打开...'; for (const item of checkedItems) { const url = item.value; console.log(`[FitGirl助手] 正在打开已选链接: ${url}`); // GM_openInTab 的第二个参数,active: true 表示在新标签页中打开并激活 // 我们可以通过一个 Promise 来等待一个短时间,模拟等待新标签页处理 await new Promise(resolve => { GM_openInTab(url, { active: true }); // 等待 1 秒,确保浏览器有时间打开和处理新标签页 setTimeout(resolve, 1000); }); } console.log('[FitGirl助手] 所有链接已按顺序打开完成。'); downloadAllButton.disabled = false; downloadAllButton.innerText = '下载已选内容'; }; // --- 核心修改结束 --- linkContainer.appendChild(downloadAllButton); entryContent.prepend(linkContainer); console.log('[FitGirl助手] 下载助手界面已成功创建。'); // 消息框函数,替代 alert function showMessage(msg) { const messageBox = document.createElement('div'); messageBox.style.cssText = ` position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background-color: #ffc107; color: #333; padding: 15px 30px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); z-index: 9999; font-family: sans-serif; opacity: 0; transition: opacity 0.5s ease-in-out; `; messageBox.innerText = msg; document.body.appendChild(messageBox); setTimeout(() => { messageBox.style.opacity = '1'; }, 10); setTimeout(() => { messageBox.style.opacity = '0'; messageBox.addEventListener('transitionend', () => { messageBox.remove(); }); }, 3000); } } else { console.log('[FitGirl助手] 正在等待页面内容加载...'); } }, 1000); // 每秒检查一次 } // --- 下载页面逻辑 (fuckingfast.co) --- // 这部分逻辑保持不变 if (window.location.hostname.includes('fuckingfast.co')) { console.log('[下载页面] 脚本已启动,准备点击下载按钮。'); const interval = setInterval(() => { const downloadButton = document.querySelector('button.link-button.text-5xl.gay-button'); if (downloadButton) { console.log('[下载页面] 下载按钮已找到,正在点击...'); clearInterval(interval); downloadButton.click(); setTimeout(() => { // 尝试关闭页面 window.close(); }, 3000); // 3秒后关闭 } else { console.log('[下载页面] 正在等待下载按钮出现...'); } }, 1000); } })();