// ==UserScript== // @name 埋堆堆视频元数据批量收集(自动翻页+CSV导出) // @namespace https://example.com/ // @version 3.0 // @description 批量收集埋堆堆视频标题、封面、简介和播放链接,支持自动翻页并导出为CSV(不下载视频) // @match https://maiduoduo.example.com/* // @grant GM_setClipboard // @grant GM_registerMenuCommand // @grant GM_download // ==/UserScript== (function() { 'use strict'; let collectedData = []; let isCollecting = false; // 提取当前页面的视频信息 function collectVideoDataFromPage() { const videos = []; document.querySelectorAll('.video-card').forEach(card => { const title = card.querySelector('.title')?.innerText.trim().replace(/,/g, ",") || '无标题'; const cover = card.querySelector('img')?.src || ''; const link = card.querySelector('a')?.href || ''; const desc = card.querySelector('.description')?.innerText.trim().replace(/,/g, ",") || ''; videos.push({ title, cover, link, desc }); }); return videos; } // 检查是否有下一页按钮 function getNextPageButton() { return document.querySelector('.pagination-next:not(.disabled)'); } // 自动翻页收集 async function autoCollect() { if (isCollecting) return; isCollecting = true; collectedData = []; while (true) { console.log("正在收集当前页数据..."); collectedData.push(...collectVideoDataFromPage()); const nextBtn = getNextPageButton(); if (!nextBtn) { console.log("没有更多页面了"); break; } console.log("跳转到下一页..."); nextBtn.click(); await waitForPageLoad(); } exportDataAsCSV(); isCollecting = false; } // 等待页面加载完成 function waitForPageLoad(timeout = 5000) { return new Promise(resolve => { const start = Date.now(); const check = () => { if (document.readyState === 'complete' || Date.now() - start > timeout) { setTimeout(resolve, 500); // 再等半秒确保内容渲染 } else { requestAnimationFrame(check); } }; check(); }); } // 导出为 CSV function exportDataAsCSV() { if (collectedData.length === 0) { alert("没有收集到任何数据"); return; } const header = ["标题", "封面URL", "播放链接", "简介"]; const rows = collectedData.map(v => [ `"${v.title}"`, `"${v.cover}"`, `"${v.link}"`, `"${v.desc}"` ]); const csvContent = [header.join(","), ...rows.map(r => r.join(","))].join("\n"); // 复制到剪贴板 GM_setClipboard(csvContent); console.log("CSV 数据:\n", csvContent); // 下载 CSV 文件 GM_download({ url: "data:text/csv;charset=utf-8," + encodeURIComponent(csvContent), name: "maiduoduo_videos.csv", saveAs: true }); alert(`已收集 ${collectedData.length} 个视频信息,并导出为 CSV 文件`); } // 注册菜单命令 GM_registerMenuCommand("批量收集视频元数据(自动翻页+CSV导出)", autoCollect); })();