如何批量检测随机生成的YouTube链接是否有效
批量检测YouTube随机链接有效性的实现方案
方案一:浏览器控制台快速检测(适合少量链接)
如果只是处理几十上百个链接,直接用浏览器开发者工具就能搞定,无需额外安装工具:
- 把所有要检测的YouTube链接整理成JavaScript数组格式:
const urls = [ "https://www.youtube.com/watch?v=abc123", "https://www.youtube.com/watch?v=def456", // 在这里添加更多链接 ];
打开Chrome/Firefox的开发者工具(快捷键
F12),切换到Console标签页粘贴以下代码并回车执行:
// 单个链接检测函数 async function checkUrl(url) { return new Promise((resolve) => { const iframe = document.createElement('iframe'); iframe.style.display = 'none'; document.body.appendChild(iframe); iframe.onload = () => { let isAvailable = true; try { const pageText = iframe.contentDocument.body.innerText; if (pageText.includes("this video isn't available")) { isAvailable = false; } } catch (e) { // 跨域无法读取内容时,默认视为有效链接(YouTube有效页面会触发跨域限制) isAvailable = true; } document.body.removeChild(iframe); resolve({ url, isAvailable }); }; iframe.onerror = () => { document.body.removeChild(iframe); resolve({ url, isAvailable: false }); }; iframe.src = url; }); } // 批量检测,控制并发数避免浏览器卡顿 async function batchCheck(urls, concurrency = 3) { const results = []; let currentIndex = 0; async function processNext() { if (currentIndex >= urls.length) return; const url = urls[currentIndex++]; const result = await checkUrl(url); results.push(result); console.log(result.isAvailable ? `✅ 有效: ${url}` : `❌ 无效: ${url}`); await processNext(); } // 启动指定数量的并发任务 await Promise.all(Array(concurrency).fill().map(processNext)); // 整理结果并复制到剪贴板 const validUrls = results.filter(r => r.isAvailable).map(r => r.url); const invalidUrls = results.filter(r => !r.isAvailable).map(r => r.url); console.log('\n=== 检测结果 ==='); console.log('有效链接:', validUrls); console.log('无效链接:', invalidUrls); const resultText = `有效链接:\n${validUrls.join('\n')}\n\n无效链接:\n${invalidUrls.join('\n')}`; navigator.clipboard.writeText(resultText).then(() => { console.log('结果已复制到剪贴板,直接粘贴到记事本即可'); }); return results; } // 执行检测,并发数设为3可平衡速度与稳定性 batchCheck(urls, 3);
执行后,控制台会实时输出每个链接的检测结果,最后会把所有有效/无效链接复制到剪贴板,直接粘贴到Notepad++即可。
注意事项
- 并发数不要设太高(建议3-5),否则浏览器可能会卡顿或阻止页面加载
- 少数情况下跨域限制会导致判断不准,遇到标记为有效但实际无效的链接,手动验证即可
方案二:Node.js批量检测(适合大量链接)
如果要处理成百上千个链接,用Node.js结合无头浏览器更高效,还能自动把结果保存到文件:
- 先安装Node.js(官网下载即可),然后创建一个新文件夹,打开命令行执行:
npm init -y npm install puppeteer
- 在文件夹里创建两个文件:
urls.txt:把所有要检测的链接放进去,每行一个check-youtube.js:复制以下代码进去:
const puppeteer = require('puppeteer'); const fs = require('fs'); // 读取urls.txt里的链接 const rawUrls = fs.readFileSync('urls.txt', 'utf8').split('\n'); const urls = rawUrls.filter(url => url.trim() !== ''); // 过滤空行 // 单个链接检测逻辑 async function checkSingleUrl(browser, url) { const page = await browser.newPage(); try { // 加载页面,设置超时避免卡住 await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 15000 }); // 检测页面是否包含指定无效文本 const isUnavailable = await page.evaluate(() => { return document.body.innerText.includes("this video isn't available"); }); return { url, isAvailable: !isUnavailable }; } catch (err) { console.log(`⚠️ 加载失败: ${url} - ${err.message}`); return { url, isAvailable: false }; } finally { await page.close(); } } // 批量检测主函数 async function batchCheckUrls() { console.log(`开始检测,共 ${urls.length} 个链接...`); // 启动无头浏览器 const browser = await puppeteer.launch({ headless: 'new', args: ['--no-sandbox', '--disable-setuid-sandbox'] // 解决部分系统的权限问题 }); const results = []; const concurrency = 5; // 并发数,可根据电脑性能调整 // 分批次处理链接 for (let i = 0; i < urls.length; i += concurrency) { const batchUrls = urls.slice(i, i + concurrency); const batchResults = await Promise.all( batchUrls.map(url => checkSingleUrl(browser, url)) ); results.push(...batchResults); // 打印当前批次结果 batchResults.forEach(res => { console.log(res.isAvailable ? `✅ 有效: ${res.url}` : `❌ 无效: ${res.url}`); }); } await browser.close(); // 分离有效/无效链接并保存到文件 const validUrls = results.filter(r => r.isAvailable).map(r => r.url); const invalidUrls = results.filter(r => !r.isAvailable).map(r => r.url); fs.writeFileSync('valid-urls.txt', validUrls.join('\n')); fs.writeFileSync('invalid-urls.txt', invalidUrls.join('\n')); console.log(`\n=== 检测完成 ===`); console.log(`有效链接已保存到 valid-urls.txt(共 ${validUrls.length} 个)`); console.log(`无效链接已保存到 invalid-urls.txt(共 ${invalidUrls.length} 个)`); } // 执行检测 batchCheckUrls();
- 在命令行执行以下命令开始检测:
node check-youtube.js
检测完成后,文件夹里会生成valid-urls.txt和invalid-urls.txt两个文件,直接打开就能看到分类好的链接。
注意事项
- 不要设置过高的并发数,否则可能被YouTube限制IP
- 如果遇到加载超时的情况,可以调整代码里的
timeout参数(比如改成20000,单位毫秒)
内容的提问来源于stack exchange,提问作者Alex Jaquero
相关产品推荐
相关产品推荐

