import { test } from '@playwright/test'; test('寻找免费的不重复歌曲URL', async ({ page }) => { // 用于存储找到的唯一歌曲URL const uniqueSongUrls = new Set(); // 要访问的免费音乐网站列表 const freeMusicSites = [ { name: 'SoundHelix', url: 'https://www.soundhelix.com/examples/mp3', selector: 'a[href$=".mp3"]' }, { name: 'Free Music Archive', url: 'https://freemusicarchive.org/genre/ambient', selector: 'a.play-item' } ]; console.log('开始寻找免费歌曲URL...'); // 遍历每个免费音乐网站 for (const site of freeMusicSites) { try { console.log(`\n正在访问: ${site.name}`); await page.goto(site.url, { timeout: 30000 }); await page.waitForLoadState('networkidle'); // 提取MP3链接 const links = page.locator(site.selector); const count = await links.count(); console.log(`在 ${site.name} 找到 ${count} 个链接`); // 遍历所有找到的链接 for (let i = 0; i < count && uniqueSongUrls.size < 10; i++) { let href = await links.nth(i).getAttribute('href'); // 处理相对链接 if (href && !href.startsWith('http')) { // 确保链接以.mp3结尾 if (href.endsWith('.mp3')) { // 创建完整的URL const url = new URL(href, site.url); href = url.href; } else { // 如果不是MP3链接,尝试从页面中提取MP3 try { // 点击链接进入详情页 await links.nth(i).click(); await page.waitForLoadState('networkidle'); // 在详情页寻找MP3链接 const mp3Links = page.locator('a[href$=".mp3"]'); if (await mp3Links.count() > 0) { href = await mp3Links.first().getAttribute('href'); if (href && !href.startsWith('http')) { const url = new URL(href, page.url()); href = url.href; } } // 返回上一页 await page.goBack(); await page.waitForLoadState('networkidle'); } catch (e) { console.error(`处理 ${site.name} 的链接 ${i} 时出错: ${e.message}`); // 如果出错,继续下一个链接 continue; } } } // 如果是有效的MP3链接,添加到集合中 if (href && href.endsWith('.mp3')) { uniqueSongUrls.add(href); console.log(`✓ 找到歌曲URL: ${href}`); } } } catch (e) { console.error(`访问 ${site.name} 时出错: ${e.message}`); continue; } } // 输出结果 console.log('\n========================='); console.log('找到的免费歌曲URL列表:'); console.log('========================='); const urlsArray = Array.from(uniqueSongUrls); urlsArray.forEach((url, index) => { console.log(`${index + 1}. ${url}`); }); console.log('\n========================='); console.log(`总共找到 ${urlsArray.length} 个不重复的免费歌曲URL`); console.log('========================='); // 确保至少找到一些URL if (urlsArray.length === 0) { console.error('没有找到任何免费歌曲URL'); throw new Error('没有找到任何免费歌曲URL'); } });