猫抓 cat-catch:一款完整的浏览器资源嗅探扩展,把网页里只能看不能存的视频变成可下载文件
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
猫抓(cat-catch)是运行在 Chrome、Edge、Firefox 上的浏览器资源嗅探扩展。它持续监听网页发出的网络请求,自动筛出视频、m3u8 播放列表等媒体资源,并支持解密、合并、转码为 mp4,解决网页视频"能看却存不下来"的问题。
三个真实场景
场景一:右键"视频另存为"只存下一个几 KB 的占位文件你在网页上看到一个视频,右键另存得到的却是个几乎为空的占位符——真正的媒体文件藏在几百条网络请求里,用 F12 手动翻 Network 面板又慢又费经验。猫抓在后台持续嗅探所有请求,把符合特征(类型、大小、正则)的资源自动归入列表;你只需让视频播放几秒,点工具栏图标,在弹出面板里勾选条目点"下载所选"即可。
猫抓弹出面板:按标签页分组展示捕获到的视频资源,带大小、MIME 类型、时长、分辨率信息,可预览后一键下载
场景二:复制下来的 m3u8 地址只是一个"播放顺序表"很多网页用 HLS 格式播片:一个 m3u8 文本文件按顺序列出几十上百个 ts 切片,浏览器边下边播、播完即弃,直接下载只得一张清单。猫抓内置的 m3u8 解析器会把切片并发拉取、按序合并,遇到 AES 加密流可手动填密钥或用"深度搜索"自动在页面里找疑似密钥,最终经 ffmpeg 转码输出一个完整的 mp4。
猫抓 m3u8 解析器:展示全部 ts 切片、自定义密钥/偏移量 IV 输入框、下载线程数与合并范围设置
场景三:WebRTC 视频通话和直播,根本没有可嗅探的地址视频通话、部分直播走 WebRTC 直连推流,不产生任何常规媒体 URL,被动嗅探天然抓不到。猫抓在 catch-script/ 目录提供一组按需注入的脚本:开启 WebRTC 录制后,页面会出现悬浮面板,列出可抓取的音视频轨道,可选视频码率与音频码率,把通话流录成本地文件;另有缓存捕捉脚本,对页面内<video>元素做主动捕获,补上被动嗅探的盲区。
能力地图
| 能力 | 入口 | 一句话说明 |
|---|---|---|
| 资源嗅探与筛选 | 弹出面板 / 侧边栏 | 后台监听所有请求,按类型、大小、正则自动归集媒体资源 |
| m3u8 解析下载 | m3u8 资源上的解析器图标 | 切片并发下载、AES 解密、合并、ffmpeg 转 mp4、录制直播 |
| 捕获与录制脚本 | 面板"录制脚本"/设置-更多功能 | 注入页面处理 WebRTC 流、缓存捕捉、深度搜索密钥 |
| 下载与后处理管道 | 下载器 + 设置页 | 边下边存、自定义文件名标签,可发送 aria2 / MQTT / 本地程序 / 在线 ffmpeg |
资源嗅探与筛选:被动监听 + 主动过滤
解决什么:媒体文件藏在全站数百条请求中、人工甄别不现实的问题。后台 Service Worker 通过webRequestAPI 在"请求发出"和"响应头到达"两个节点捕获数据,按可配置的资源类型、大小、正则表达式过滤后入列。
怎么用:打开任意带视频的网页并播放几秒,点工具栏图标查看列表。面板内支持正则筛选、按大小/时长排序;2.6.8 起过滤大小支持表达式写法,如>100 KB、500-1000 MB。下载时会原样复用该资源当时的请求头(Referer、Cookie),规避多数防盗链。
明确不做的事:只嗅探"页面上真实发出过的网络请求"。加密在页面 JS 内部、由 WebRTC 信令协商产生的地址,嗅探不到——这部分归录制脚本管。另外每页桌面端最多储存 9999 条、移动端 999 条(见 js/init.js 中maxLength配置),超限自动清空旧数据,不做无限堆积。
m3u8 解析下载:切片、解密、合并一站式
解决什么:"m3u8 是一百多个 ts 切片 + 一张顺序表"无法直接保存、加密流下不下来、直播流边播边丢的问题。解析器展示全部切片(含时长、分辨率估算),支持并发下载(最大线程数 6,2.4.7 调整)、AES 密钥解密、指定下载范围、按EXT-X-BYTERANGE字节范围切片的合并(2.6.8 起),并可点选任意切片参与合并;2.7.1 起失败切片自动重试,2.7.2 起可隐藏已下载成功的切片。
怎么用:在嗅探列表中点 m3u8 条目的"m3u8 解析器"图标进入解析页,确认切片数与总时长,选择"合并下载 + ffmpeg 转 mp4"后开始。密钥可手填(支持 16 进制、base64 或密钥地址),或用"深度搜索"在页面脚本中自动挖掘,2.5.7 起对疑似密钥提供验证。
明确不做的事:不处理 DRM(如 Widevine)保护的内容;2.4.3 起已移除 YouTube 专属支持(官方建议改用缓存捕捉);超过下载器处理能力的超大直播流需配合"边下边存"或发送 aria2,解析页本身不做断点续传的长期任务队列。
捕获与录制脚本:对付嗅探盲区
解决什么:WebRTC 直连流、无 src 属性的<video>等"嗅不到"的资源。catch-script/ 下共 5 个按需注入脚本:webrtc.js录制 WebRTC 轨道(2.4.9 加入、2.5.3 重写,支持码率设置与定时分段保存);catch.js做缓存捕捉/视频捕获(2.0.0 加入);search.js做深度搜索,在页面脚本里找 m3u8 地址与疑似密钥(2.2.4 加入,2.6.6 增强)。
怎么用:在设置"更多功能"中开启对应脚本,页面会注入悬浮面板,选择轨道/目标后开始录制;深度搜索得到的疑似密钥会直接显示在弹出面板的"疑似密钥"标签里(2.5.3 起)。
明确不做的事:这些脚本会修改页面行为,属于"侵入式"功能,官方建议按需开启而非常驻——2.6.7 就专门修复过深度搜索导致某些网站无法正常使用的问题。它也不负责 DRM 解密,只做轨道/媒体流层面的抓取。
技术内幕
选择一:用"心跳"连接把 Service Worker 顶在休眠线以内
MV3 规定扩展后台是 Service Worker,空闲约 5 分钟即被浏览器强制终止;但资源嗅探必须长期监听,后台一死就漏抓。猫抓的方案是让前台页面与后台维持一条名为HeartBeat的端口连接,每 250000 毫秒(4 分 10 秒)断开重连一次,始终贴着浏览器"有活跃连接不杀"的休眠线:
chrome.runtime.onConnect.addListener(function (Port) { if (chrome.runtime.lastError || Port.name !== "HeartBeat") return; Port.postMessage("HeartBeat"); const interval = setInterval(function () { clearInterval(interval); Port.disconnect(); }, 250000); ... });(摘自 js/background.js,另有setInterval(chrome.runtime.getPlatformInfo, 25 * 1000)辅助保活)
为什么这样做:嗅探需要跨页面全局视角和请求头访问权,这些只有后台 Service Worker 有;把它换成常驻 content script 会失去全部能力,代价更大。代价是什么:这是典型的 hack,完全依赖 Chrome "有活跃端口则不终止"的未承诺行为,浏览器策略收紧随时可能失效——作者在更新记录里也自嘲这是"肮脏的手段"。
选择二:storage.session 换 IO 稳定性
2.5.3 起,缓存数据从storage.local(落盘持久)切到storage.session(内存态),并用chrome.alarms定时把内存缓存写回,代码里就是这一行:
(chrome.storage.session ?? chrome.storage.local).set({ MediaData: cacheData });(见 js/background.js 的save定时任务)
为什么这样做:storage.local写盘 IO 出错会直接导致扩展不可用,注释里写明目的——"减少 IO 错误导致扩展无法使用"。代价是什么:要求 Chrome 104+(低版本自动回退storage.local,即那行??兜底);且内存态数据随浏览器会话消失,缓存列表不具备跨重启的持久性,长列表依赖定时任务及时落回。
选择三:polyfill 层兼容非标准 Chromium
js/polyfill.js 对残缺环境逐个打补丁:夸克浏览器没有chrome.downloads,就用<a download>点击模拟(onChanged等监听全部置为空函数);Chromium 114 以下没有sidePanel,注入空实现;手机浏览器没有contextMenus、commands、windows,同样注入 no-op 版本。
为什么这样做:让同一份代码跑在 Chrome、Edge、夸克、手机浏览器上,避免维护多分支。代价是什么:在残缺环境里能力明确降级且无感知——夸克版无法监听下载状态、无法判断下载是否失败、无另存为,属于"能用但残缺",作者用一句"唉~"注释坦承了这一点。
三步跑起来
- 安装:从 Chrome Web Store / Edge 附加组件 / Firefox Add-ons 搜索 cat-catch 安装;或用源码:
git clone https://gitcode.com/GitHub_Trending/ca/cat-catch,打开扩展管理页 → 开启"开发者模式" → "加载已解压的扩展程序"选中该目录。注意 README 提示:商店里存在加了广告代码的"伪猫抓",以官方仓库为准。 - 第一次嗅探:打开任意带视频的网页,让视频播放几秒,点工具栏猫抓图标。面板按"当前页面 / 其他页面"分组列出捕获资源(名称、大小、MIME、时长、分辨率),勾选后点"下载所选",浏览器会复用当时的请求头发起下载。
- 第一次 m3u8 下载:在列表中找到
.m3u8条目,点"m3u8 解析器"图标进入解析页,确认切片数与总时长,勾选"mp4 格式"后合并下载。完成后浏览器自动保存转码好的 mp4;加密流可先用"深度搜索"找密钥再开始。
深度玩法
- 发送到 aria2(2.4.7 加入 RPC,2.7.0 支持指定下载目录,支持密钥与 Cookie):把下载任务交给本地 aria2 客户端,适合搭"网页 → NAS"的无人值守管道,适合进阶用户。
- MQTT 推送(2.6.4):把嗅探数据/任务推给自有 MQTT 设备,适合做智能家居或自建监控的自动化联动。
- 调用本地程序 / m3u8dl 协议(2.5.3 加入"调用本地程序",2.0.0 起支持
m3u8dl://自定义协议调用 N_m3u8DL-CLI):大文件交给 CLI 稳定落地,浏览器只负责"找到并预处理",适合下载超大 m3u8 的用户。 - 正则匹配 + 过滤大小表达式(2.6.0 起正则可拿到请求头参与判断,2.6.8 起大小支持
>100 KB、500-1000 MB写法):精确控制"抓什么、滤什么",适合高频嗅探的进阶用户。 - 屏蔽列表与全局强制屏蔽(2.5.9 起个人黑名单/白名单,2.6.5 起全局强制屏蔽名单,站点方可通过 Issue 申请
[Opt-Out Request] 域名):管理多站点工作流,适合嗅探面很广的重度用户。 - 快捷键 + 自定义 CSS(2.4.0):为启用/暂停嗅探、捕获、预览绑定全局快捷键(manifest 预置了
enable、auto_down、deepSearch、m3u8等命令槽位);设置页填入 CSS 直接改面板外观,适合追求效率与个性化者。
能力边界对照
| 平台 / 环境 | 版本要求 | 功能支持情况 |
|---|---|---|
| Chrome / Edge | Chromium 93+ | 完整功能需 104+(storage.session);侧边栏模式需 114+(sidePanel) |
| Firefox | MV3 构建 | 无侧边栏(manifest.firefox.json 未声明side_panel),脚本类功能需较新版本内核 |
| Edge / 手机浏览器(Android) | 2.6.1 起手机适配 | 每页缓存上限降为 999 条;无快捷键、右键菜单降级为空实现 |
| 夸克等修改版 Chromium | 视内核而定 | chrome.downloads缺失,下载退化为<a download>模拟,无法监听下载失败 |
| Safari | — | 不支持,无对应构建 |
| 网页协议 | http / https | 内容脚本仅匹配http/https://*/*,见 manifest.json |
明确不支持与已知降级:不处理任何 DRM 保护内容(Widevine 等解密均不在范围内);2.4.3 起移除了 YouTube 专属支持;夸克环境下无法监听下载状态、无法另存为,属文档化的降级。数据层面所有信息仅本地存储处理,无远程上报与跟踪器(README 隐私政策);受版权保护内容的下载由用户自行担责。
选型参考
| 方案 | 形态 | 能做什么 | 局限 |
|---|---|---|---|
| 猫抓 cat-catch | 浏览器扩展 | 嗅探 + m3u8 解析/解密/合并 + WebRTC 录制 + aria2/MQTT/本地程序后处理管道 | 依赖浏览器环境,Service Worker 保活属 hack,超大任务不如 CLI 稳 |
| N_m3u8DL-CLI | 命令行工具 | m3u8 下载主力,大文件稳定落地(猫抓可通过m3u8dl://协议调用它) | 需先拿到 m3u8 地址,无嗅探、无录制能力 |
| 浏览器 F12 手动查看 | 内置开发者工具 | 查看单条请求、手动复制 URL | 无自动筛选、无合并/解密/转码 |
三者是互补而非替代关系:猫抓负责"找到并预处理",CLI 负责"大文件稳定落地",猫抓的 aria2/本地程序调用正是把两者串起来的通道——选型时先问自己是"找资源"还是"下大文件",前者选猫抓,后者让猫抓把任务递出去。
项目脉搏
当前版本2.7.2(见 manifest.json)。近期更新集中在 m3u8 解析器(2.7.0 数据预处理与"从缓存读取 m3u8 解决一次性 URL 问题"、2.7.1 下载失败自动重试、2.7.2 隐藏已成功切片)与 Firefox 平台修复(2.7.2 修复 Android 下无法使用)。CHANGELOG.md 显示发版节奏稳定:语言覆盖 11 种(中/繁中/英/日/韩/俄/西/葡/土/越/法,见 _locales/ 目录,多由社区贡献者翻译);能力面从 2.0.0 的视频捕获一路扩到 2.6.4 的 MQTT 推送、2.7.0 的右键菜单与标签嵌套。许可为GPL-3.0,README 明确基于其源码的扩展应继续保持开源——这是针对"山寨加广告上架"问题的直接回应。
分人群行动建议
- 普通用户:装完即用,先走"三步跑起来"里的前两步——从应用商店安装 → 播放一段视频 → 点图标下载第一条资源;遇到 m3u8 再进解析器,把"mp4 格式"勾上即可。
- 进阶用户:配置 aria2 RPC(支持密钥、Cookie、下载目录)或
m3u8dl://调用 CLI,把猫抓变成"嗅探入口 + 分发中枢",配合正则与屏蔽列表管理多站点工作流。 - 想学实现的开发者:建议从 js/background.js 的
HeartBeat端口逻辑读起,再看 js/polyfill.js 如何为残缺浏览器环境逐 API 降级,最后用 CHANGELOG.md 对照各版本的工程取舍,理解"一个 MV3 扩展如何与浏览器进程管理周旋"。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考