抖音视频下载器

xxx kkk
2026-02-20T07:41:48Z

推荐页跳转详情页 + 拦截CDN视频URL下载

🎬 抖音视频下载器 — Tampermonkey 油猴脚本

一键下载抖音视频，无需安装任何软件，无需管理员权限，只需浏览器 + 油猴扩展。

✨ 功能特点

🖱️ 一键下载 — 点击悬浮按钮即可下载当前播放的视频

🎯 智能识别 — 自动识别当前播放视频，支持推荐页和详情页

📦 音视频合并 — 使用 download_addr 获取完整视频（非 DASH 分离流）

🔄 多重策略 — API 缓存 → CDN 拦截 → Performance API → video.src，层层兜底

🫧 悬浮按钮 — 可拖动、吸附屏幕边缘、半隐藏设计，不遮挡内容

📱 触屏支持 — 支持触屏拖拽操作

🚫 无需外部工具 — 不需要 yt-dlp、Python 或任何命令行工具

🔓 无需管理员权限 — 不涉及 Cookie 解密或系统级操作

📋 前置要求

需求 | 说明
浏览器 | Chrome / Edge / Firefox 等主流浏览器
Tampermonkey | 浏览器油猴扩展（Chrome 版 / Edge 版 / Firefox 版）

💡 什么是 Tampermonkey（油猴）？

Tampermonkey 是一个浏览器扩展，允许用户在网页中运行自定义 JavaScript 脚本（称为"用户脚本" / "UserScript"）。它可以增强网页功能、修改页面行为、自动化操作等。本脚本就是一个运行在抖音网页上的用户脚本。

🚀 安装方法

第一步：安装 Tampermonkey 扩展

1. 打开浏览器的扩展商店（上方链接）

2. 搜索 Tampermonkey 并安装

3. 安装完成后，浏览器右上角会出现 Tampermonkey 图标

第二步：安装本脚本

方法 A：直接安装（推荐）

1. 点击本仓库中的 douyin_downloader.user.js 文件

2. 点击 Raw 按钮

3. Tampermonkey 会自动弹出安装提示，点击 安装 即可

方法 B：手动安装

1. 复制 douyin_downloader.user.js 的全部代码

2. 点击浏览器右上角的 Tampermonkey 图标 → 添加新脚本

3. 删除编辑器中的默认内容，粘贴复制的代码

4. 按 Ctrl + S 保存

📖 使用说明

在推荐页下载

1. 打开 抖音网页版 推荐页

2. 滑动到想下载的视频

3. 点击屏幕右侧的 ⬇️ 红色悬浮按钮

4. 脚本会自动打开该视频的详情页，并在详情页自动完成下载

在详情页下载

1. 打开任意抖音视频详情页（URL 形如 https://www.douyin.com/video/xxxxx）

2. 等待视频加载完成

3. 点击 ⬇️ 红色悬浮按钮

4. 视频将直接开始下载

悬浮按钮操作

操作 | 效果
单击 | 下载当前视频
拖拽 | 移动按钮到任意位置
松手 | 按钮自动吸附到最近的屏幕边缘
悬停 | 半隐藏的按钮会完全展开

下载状态提示

按钮状态 | 含义
⬇️ 红色 | 就绪，可点击下载
⏳ 橙色 | 正在提取视频信息
25% 等数字 | 下载进度
✅ 绿色 | 下载完成

🏗️ 技术架构

┌─────────────────────────────────────────────────┐
│  @run-at document-start                         │
│  ┌────────────────────────────────────────────┐  │
│  │  Hook XMLHttpRequest.open/send             │  │
│  │  Hook window.fetch                         │  │
│  │  → 捕获 CDN URL (过滤音频流)              │  │
│  │  → 解析 API JSON (提取 download_addr)     │  │
│  └────────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│  DOMContentLoaded                               │
│  ┌────────────────────────────────────────────┐  │
│  │  创建可拖动悬浮下载按钮                    │  │
│  │  检查是否需要自动下载 (GM_getValue)        │  │
│  └────────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│  点击下载按钮                                   │
│  ┌────────────────────────────────────────────┐  │
│  │  推荐页: 找视频ID → window.open(详情页)   │  │
│  │  详情页: API缓存 → CDN缓存 → Performance  │  │
│  │  → GM_download 下载                       │  │
│  └────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘

核心策略

脚本使用五重兜底策略来确保下载成功率：

1. API 缓存命中 — 优先使用拦截到的 API 响应中 download_addr 字段

2. CDN URL 缓存 — 使用拦截到的最新视频 CDN 地址

3. API 任意命中 — 从所有 API 缓存中取最后一条

4. Performance API — 从浏览器性能资源记录中查找视频 URL

5. video.src — 直接使用 元素的 src（blob URL 除外）

视频地址优先级

download_addr > download_suffix_logo_addr > play_addr > bit_rate
   (合并流)          (无水印下载)            (可能是DASH)   (各码率)

⚠️ play_addr 在 DASH 模式下可能是纯音频或纯视频流，download_addr 才是音视频合并的完整视频。

❓ 常见问题

Q: 点击下载后跳转到空白页？

A: 早期版本使用 a.click() 下载会出现此问题，当前版本（v6.2）已改用 GM_download，不会出现此情况。如果仍有问题，请确认 Tampermonkey 版本是否为最新。

Q: 下载的视频只有声音没有画面？

A: 这说明下载到的是 DASH 音频流。当前版本已优先使用 download_addr（音视频合并流），应不会再出现此问题。如仍有问题请提 Issue。

Q: 推荐页点击无反应？

A: 推荐页下载需要先识别视频 ID。请确保：

视频已完全加载并正在播放

视频区域在可视范围内

Q: 弹出 "找不到视频ID"？

A: 抖音页面结构可能更新导致选择器失效。请提 Issue 并附上当前页面的 URL。

Q: 按钮不见了？

A: 按钮可能吸附在屏幕边缘并半隐藏。将鼠标移到屏幕四个边缘附近查找，按钮会在鼠标悬停时滑出。

🔧 开发说明

本脚本经历了多个方案的探索和 6 个大版本的迭代，详细的开发历程和踩坑记录见 抖音下载器开发经验总结.md。

曾尝试但失败的方案

方案 | 失败原因
Python yt-dlp | 需要管理员权限解密 Chrome Cookie
Python requests | 抖音是 SPA，直接请求无法获取视频数据
Chrome 扩展 | 开发调试复杂，权限管理麻烦
RENDER_DATA 解析 | SSR 数据不含视频信息
React Fiber 遍历 | 油猴沙箱隔离无法访问

使用的 Tampermonkey API

API | 用途
GM_download | 下载文件（主要下载方式）
GM_xmlhttpRequest | 跨域请求（备用 blob 下载）
GM_setValue / GM_getValue | 跨标签页状态传递（自动下载标记）
unsafeWindow | 拦截页面原生 fetch

📄 许可证

本项目基于 MIT 许可证 开源。