全能下载工具 - Universal Downloader
一个功能强大的油猴脚本,可以突破网站限制,下载网页上的所有媒体资源(视频、音频、图片、文档等),支持质量选择和自定义配置。
✨ 主要特性
🎯 核心功能
全资源检测: 自动检测页面上的所有媒体资源
- 视频(MP4, WebM, MKV, AVI, MOV, FLV 等)
- 音频(MP3, WAV, OGG, AAC, FLAC 等)
- 图片(JPG, PNG, GIF, WebP, SVG 等)
- 文档(PDF, DOC, XLS, PPT 等)
- 压缩包(ZIP, RAR, 7Z 等)
智能网络拦截:
- 拦截 Fetch API 请求
- 拦截 XMLHttpRequest 请求
- 监听 DOM 变化自动检测新资源
- 捕获动态加载的媒体内容
质量选择:
- 支持多质量视频下载
- 自动识别不同清晰度(1080p, 720p, 480p 等)
- 可自定义默认质量偏好
网站特殊处理:
- YouTube - 提取多质量视频流
- Bilibili - 支持 DASH 和 FLV 格式
- Twitter/X - 获取原图高清版本
- Instagram - 提取最高分辨率图片
- TikTok - 视频资源提取
- 更多网站持续支持中...
🎨 用户界面
- 优雅的浮动按钮: 右下角圆形按钮,随时可访问
- 侧边下载面板: 流畅的滑入/滑出动画
- 分类资源展示: 按类型自动分组显示
- 实时进度显示: 下载进度百分比实时更新
- 配置持久化: 设置自动保存,重启浏览器依然保留
📦 安装方法
第一步:安装油猴脚本管理器
选择以下任一扩展安装到您的浏览器:
Tampermonkey(推荐)
Violentmonkey(替代选择)
第二步:安装脚本
- 打开 Tampermonkey 管理面板
- 点击 "+" 按钮创建新脚本
- 复制
universal-downloader.user.js 的全部内容
- 粘贴到编辑器中
- 按 Ctrl+S 保存
- 刷新网页,脚本即可生效
🚀 使用指南
基本使用
访问任意网页
- 脚本会自动在所有网页上运行
- 右下角会出现紫色的下载按钮(⬇)
打开下载面板
- 点击右下角的浮动按钮
- 或使用油猴菜单中的 "打开下载面板"
查看检测到的资源
- 面板会自动列出所有检测到的资源
- 资源按类型分组(视频、音频、图片等)
- 显示资源来源网站标签
选择质量并下载
- 如果资源有多个质量,会显示质量选择器
- 选择想要的质量
- 点击 "下载" 按钮
- 观察进度条,等待下载完成
刷新资源列表
- 如果页面动态加载了新内容
- 点击面板底部的 "刷新资源列表" 按钮
- 或使用油猴菜单中的 "刷新资源检测"
高级功能
配置默认质量
- 打开下载面板
- 在底部找到 "默认质量" 设置
- 选择:
- 高质量 - 优先下载 1080p/720p
- 中等质量 - 优先下载 720p/480p
- 低质量 - 优先下载 480p/360p
- 设置会自动保存
在新标签打开资源
- 每个资源项都有 "新标签打开" 按钮
- 点击后会在新标签页中打开资源
- 可以预览后再决定是否下载
使用控制台 API
打开浏览器控制台(F12),可以使用以下命令:
// 查看所有检测到的资源
UniversalDownloader.detector.getAllResources()
// 手动触发资源检测
UniversalDownloader.detector.detectExistingResources()
// 打开/关闭下载面板
UniversalDownloader.ui.showPanel()
UniversalDownloader.ui.hidePanel()
🌐 支持的网站
完全支持
- ✅ YouTube - 多质量视频流提取
- ✅ Bilibili - DASH/FLV 格式支持
- ✅ Twitter/X - 原图高清下载
- ✅ Instagram - 最高分辨率图片
- ✅ 通用网站 - 标准媒体元素
部分支持
- 🟡 腾讯视频 - 基础支持
- 🟡 优酷 - 基础支持
- 🟡 爱奇艺 - 基础支持
- 🟡 抖音 - 基础支持
- 🟡 TikTok - 基础支持
不支持
- ❌ Netflix - DRM 加密保护
- ❌ Disney+ - DRM 加密保护
- ❌ HBO Max - DRM 加密保护
⚙️ 技术原理
资源检测机制
DOM 扫描
- 扫描所有
<video> 元素
- 扫描所有
<audio> 元素
- 扫描所有
<img> 元素
- 扫描所有
<a> 下载链接
网络拦截
- 劫持
window.fetch 方法
- 劫持
XMLHttpRequest.prototype.open 方法
- 分析请求 URL,提取媒体资源
DOM 监听
- 使用
MutationObserver 监听 DOM 变化
- 自动检测动态添加的媒体元素
- 实时更新资源列表
媒体劫持
- 劫持
HTMLVideoElement.src 属性
- 劫持
HTMLAudioElement.src 属性
- 捕获通过 JavaScript 设置的媒体源
网站特定处理
不同网站使用不同的技术来保护和传输媒体内容,脚本针对主流网站实现了特殊处理:
- YouTube: 解析
ytInitialPlayerResponse 提取视频流
- Bilibili: 读取
window.__playinfo__ 获取 DASH/FLV 数据
- Twitter: 替换图片 URL 参数获取原图
- Instagram: 从
srcset 提取最高分辨率版本
下载实现
跨域下载
- 使用
GM_xmlhttpRequest API
- 绕过 CORS 限制
- 支持跨域资源下载
进度跟踪
- 监听
onprogress 事件
- 计算下载百分比
- 实时更新界面
文件保存
- 使用 Blob API 创建文件对象
- 创建临时 Object URL
- 触发浏览器下载
🔧 开发和调试
项目结构
weiruan-All-in-one-download/
├── universal-downloader.user.js # 主脚本文件
├── site-handlers.js # 网站特定处理模块(参考)
├── test/
│ ├── test-page.html # 测试页面
│ └── TEST_GUIDE.md # 测试指南
├── README.md # 使用文档
└── LICENSE # 开源协议
开发环境设置
- 安装 Tampermonkey
- 启用开发者模式
- 在脚本中添加
@require 引用外部库(如需要)
- 使用浏览器控制台调试
调试技巧
查看日志
// 脚本会输出详细的调试信息
console.log('检测到资源:', resource)
console.log('YouTube 处理器已激活')
检查资源列表
// 在控制台运行
UniversalDownloader.detector.getAllResources()
测试网站处理
// 手动触发网站特定处理
const handlers = new SiteHandlers()
handlers.init(UniversalDownloader.detector)
🐛 常见问题
Q: 为什么某些视频无法下载?
A: 可能的原因:
- 视频使用了 DRM 加密保护
- 视频使用了特殊的流媒体协议(HLS/DASH)
- 网站有防盗链保护
- 需要登录或付费才能访问
Q: 下载的文件名是乱码怎么办?
A: 脚本会自动生成文件名,格式为 页面标题_时间戳.扩展名。如果包含特殊字符会被替换为 -。
Q: 如何下载 HLS (m3u8) 格式的视频?
A: 脚本会检测 m3u8 链接,但下载 HLS 视频需要额外处理。建议使用专门的 HLS 下载工具。
Q: 某些网站检测不到资源?
A: 尝试以下方法:
- 播放视频/音频,让资源完全加载
- 点击 "刷新资源列表" 按钮
- 检查控制台是否有错误信息
- 某些网站可能需要特殊处理
Q: 如何关闭通知?
A: 目前通知功能默认开启,后续版本会添加开关选项。
Q: 脚本影响页面性能吗?
A: 脚本经过优化,对页面性能影响很小。如果遇到卡顿,可以临时禁用脚本。
📋 更新日志
v1.0.0 (2025-01-05)
- ✨ 初始版本发布
- ✅ 实现核心资源检测功能
- ✅ 支持视频、音频、图片、文档下载
- ✅ 添加质量选择功能
- ✅ 实现网站特定处理(YouTube, Bilibili 等)
- ✅ 创建用户界面和浮动按钮
- ✅ 添加配置保存功能
- ✅ 完成测试页面和文档
🤝 贡献
欢迎贡献代码和建议!
如何贡献
- Fork 本项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature)
- 提交更改 (
git commit -m 'Add some AmazingFeature')
- 推送到分支 (
git push origin feature/AmazingFeature)
- 创建 Pull Request
贡献指南
- 添加新网站支持
- 改进资源检测算法
- 优化用户界面
- 修复 Bug
- 完善文档
📄 开源协议
本项目采用 MIT 协议开源,详见 LICENSE 文件。
⚠️ 免责声明
本工具仅供学习和研究使用,请遵守相关网站的服务条款和版权法律。下载的内容仅供个人使用,不得用于商业目的或侵犯他人权益。使用本工具产生的任何法律责任由使用者自行承担。
📧 联系方式
🌟 致谢
感谢所有为本项目做出贡献的开发者!
如果觉得这个项目有帮助,请给个 ⭐Star 支持一下!