直接使用油猴脚本来提取音频,主要捕获通过 new Audio在js中直接播放url声音的网页,效果如下,点击即可下载本地:
// ==UserScript== // @name Advanced Audio URL Catcher (JS Hook) // @namespace http://tampermonkey.net/ // @version 1.2 // @description Hooks the Audio() constructor and <audio>.src setter to capture dynamically played audio URLs and provides download links. // @author YourName // @match *://*/* // @grant GM_download // @grant GM_log // @grant unsafeWindow // @run-at document-start // ==/UserScript== (function() { 'use strict'; // --- 配置 --- // 设置要忽略的URL模式(例如,短的提示音或广告) const IGNORE_PATTERNS = [ /ad-sound\.mp3/i, // 忽略广告声音 /\.wav$/i, // 忽略 .wav 文件 /notification\.mp3/i // 忽略通知音 ]; // 使用 Set 来存储已捕获的URL,自动处理重复项 const capturedUrls = new Set(); let panel = null; // --- 核心功能:捕获并显示URL --- function captureUrl(url) { // 1. 过滤无效或不想要的URL if (!url || typeof url !== 'string' || url.startsWith('blob:') || url.startsWith('data:')) { return; } // 2. 检查是否已捕获 if (capturedUrls.has(url)) { return; } // 3. 检查是否匹配忽略列表 for (const pattern of IGNORE_PATTERNS) { if (pattern.test(url)) { GM_log(`Ignored audio URL by pattern: ${url}`); return; } } // 4. 确认捕获 GM_log(`Captured audio URL: ${url}`); capturedUrls.add(url); displayUrl(url); } // --- UI部分:创建和更新悬浮面板 --- function createPanel() { if (document.getElementById('audio-catcher-panel')) { return; } panel = document.createElement('div'); panel.id = 'audio-catcher-panel'; panel.style.position = 'fixed'; panel.style.bottom = '10px'; panel.style.right = '10px'; panel.style.width = '300px'; panel.style.maxHeight = '400px'; panel.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; panel.style.color = 'white'; panel.style.border = '1px solid #444'; panel.style.borderRadius = '8px'; panel.style.zIndex = '99999'; panel.style.overflowY = 'auto'; panel.style.fontSize = '12px'; panel.style.fontFamily = 'sans-serif'; panel.style.padding = '5px'; const header = document.createElement('div'); header.innerHTML = '<strong>音频捕获器</strong> (点击下载)'; header.style.padding = '5px'; header.style.textAlign = 'center'; header.style.borderBottom = '1px solid #555'; panel.appendChild(header); document.body.appendChild(panel); } function displayUrl(url) { if (!panel) { createPanel(); } const item = document.createElement('div'); item.style.padding = '8px'; item.style.borderBottom = '1px solid #333'; item.style.cursor = 'pointer'; item.style.wordBreak = 'break-all'; item.title = `点击下载: ${url}`; // 尝试从URL中提取文件名 let filename = 'audio.mp3'; try { const urlObj = new URL(url); filename = urlObj.pathname.split('/').pop() || filename; } catch (e) { // 如果URL无效,则使用基本提取 filename = url.substring(url.lastIndexOf('/') + 1); } item.textContent = `
网友回复