拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的?

9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的? 9层回退解析链VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的【免费下载链接】VideoDownloadHelperChrome Extension to Help Download Video for Some Video Sites.项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelperVideoDownloadHelper 是一款开源的浏览器视频下载扩展它的核心是 ParseVideo 引擎打开弹窗时自动嗅探当前页面用一条 9 层回退解析链从最专用到最通用逐层扫描页面源码把藏在 JSON、meta 标签、HTML5 视频标签、HLS 播放列表甚至直链里的视频 URL逐一揪出来供你一键下载、复制或批量处理。全程本地运行、零依赖、无服务器。为什么视频嗅探这么难视频页面上的真实地址往往以各种形态藏着站点私有的 JSON 字段如video_url: https://…Open Graph 的 meta 标签如meta propertyog:video content…标准 HTML5 的video src/source src标签带.m3u8后缀的流媒体播放列表直接嵌在页面里的.mp4、.webm、.mp3等媒体文件链接每个站点的写法都不一样页面结构还可能随时改版。因此最可靠的策略是从最专用的策略开始逐层尝试命中即停失败就立刻换下一招。这正是 parsevideo.js 里Parse()入口方法的设计哲学。9层回退解析链总览这条回退链像一场接力赛每一层没找到就交棒给下一层任何一层成功就短路返回后面的层直接跳过。层级策略扫描目标1️⃣站点专用解析器秒拍、微博、TED、Vimeo、Dailymotion 等 9 大站点2️⃣通用 video_url 字段页面 JSON 中的video_url:https://…片段3️⃣mp4 URL 片段mp4,url:https://…这类播放器配置4️⃣og:video meta 标签页面头部meta propertyog:video…声明5️⃣video标签HTML5 视频元素的 src 属性6️⃣source标签video/audio 元素内 source 子元素的 src7️⃣.m3u8 播放列表HLS 流媒体地址8️⃣媒体文件直链以 .mp4/.webm/.mkv/.mov/.mp3/.m4a 结尾的直链9️⃣兜底交接引擎放弃后由内容脚本的 DOM 嗅探与 DevTools 网络嗅探接管这个短路返回的设计至关重要越专用的层命中率越可靠排在越前面越通用的层误报率越高排在越后面。只有 8 层全部落空引擎才返回空值把战场交给第 9 层。第一层9个站点的专用解析器引擎先用 functions.js 中的extractDomain()取出页面域名并去掉www.前缀再查一张域名 → 解析器的调度表。9 个站点各自拥有量身定制的解析器站点嗅探思路简化版miaopai.com最省事的一招不看页面内容直接把页面 URL 中的 ID 拼进视频 CDN 地址xiaokaxiu.com在player.swf?scid参数里找到视频 ID拼出流地址weibo.com查找video_src参数并做 URL 解码facebook.com按优先级依次尝试hd_src/sd_src等 4 组高清、标清字段dailymotion.com先找播放器元数据 JSON 里的 HLS 清单再找渐进式 MP4 流vimeo.com在播放器配置的progressive数组里找 MP4 地址ted.com匹配 low / medium / high 多清晰度字段msdn.comog:video meta 页面内 .mp4 直链双管齐下pearvideo.com匹配hdUrl/sdUrl/ldUrl三档清晰度变量专用解析器最精准但最不通用所以被放在链首命中时结果几乎必然正确不命中时付出的代价只是几条正则表达式的工夫。第2至8层通用回退如何运作对剩下千千万万没有定制服务的站点引擎依次回退到 7 个通用策略从半专用走向全通用第 2 层 video_url 字段很多站点会把真实地址直接写进页面 JSON引擎用正则在整个 HTML 里搜索video_url: https://…。第 3 层 mp4 URL部分播放器的配置长这样mp4, url: https://…于是引擎备了专属模式。第 4 层 og:video meta 标签Open Graph 标准允许站点在页面头部声明视频链接是最标准的通用来源。第 5、6 层video/source标签原生 HTML5 视频页面最常见的形态。第 7 层 .m3u8 播放列表流媒体站点的 HLS 地址找到后弹窗还能进一步展开 TS 分片列表见 video.js 的 m3u8 展开逻辑。第 8 层 媒体文件直链最激进的兜底——只要页面里出现以已知视频/音频扩展名结尾的链接就收进来。扩展名清单通过VIDEO_EXTENSIONS/AUDIO_EXTENSIONS与 functions.js 共享新增格式只需改一处。第 8 层被刻意放在最后它命中率最高但误报也最多只有前面所有层都失败时才轮到它出场。三道质量关卡FixURL、ValidURL 与去重细心你会发现每一个正则命中的结果都不会直接返回而是先过同一套海关FixURL()先修复真实页面里满是脏数据——JSON 转义过的https:\/\/…、协议相对的//…开头地址这里统一修好ValidURL()再校验用严格正则确认它是真实可访问的 URL并拒绝blob:这类伪地址uniq()后去重同一地址出现多次只保留一次。三道关全部通过后结果以单个返回字符串多个返回数组的形式交出去——比如一个页面同时给出 480P 和 1080P弹窗就能统一渲染成多条结果。从嗅探到下载完整流程引擎并非孤军奋战它只是 manifest.json 声明的 Manifest V3 扩展中的一个环节完整链路是注入点击工具栏图标background.js 通过chrome.scripting.executeScript把构建好的内容脚本注入当前页面仅限 http/https 普通网页自动跳过受限页面。采集内容脚本 getPagesSource.js 抓取整页 HTML构造new ParseVideo(url, html)。解析调用Parse()跑完上面的 9 层回退链。上报结果经chrome.runtime.sendMessage发给弹窗同时驱动工具栏图标上的数字角标——几眼就能看出这页嗅到了几条媒体地址。展示弹窗界面为每条地址打上 视频 / 音频 / 图片 标签提供 下载、复制、全部下载、全部复制 四种操作下载走浏览器原生下载管理器文件名还会根据页面标题自动生成。如果 ParseVideo 引擎真的什么也没找到也不是故事的结尾——第 9 层的兜底交接随之启动内容脚本会在 DOM 里继续翻找meta[property*video]、source[typevideo/mp4]、video 元素属性等线索甚至在 DevTools 网络面板监听超过 100KB 的大请求做网络级嗅探。等这些也全部失败才会认定此页确实无视频可下。如何亲手验证这套解析器项目在 test/ 目录下用 Mocha Chai 搭了完整单测每一层回退策略都有专属测试文件真实页面片段作为样本存放在 test/data/例如test_parsevideo.js ——Parse()整体回退流程test_parsevideo_m3u8.js —— .m3u8 层test_parsevideo_video_tag.js / test_parsevideo_source_tag.js —— HTML5 标签层test_functions.js ——ValidURL/FixURL等质量关卡只需安装 Node.js 18在仓库根目录执行npm install与npm test即可跑通全部用例npm run coverage还能生成覆盖率报告。想为新站点补解析器先看看 tested-urls.txt 里已验证的真实页面样例以及 todo-urls.txt 中的待支持清单。小结三条可迁移的设计智慧回看这条 9 层回退链有三点值得记住从专用到通用最可靠的先试、最激进的垫底经典的先小锤后大锤思维先验证后返回页面 HTML 都是不可信输入修复 → 校验 → 去重三道关全过才允许出引擎零依赖整个引擎是纯 JavaScript 正则实现没有引入任何第三方解析库扩展因此轻量、快速、易审计。下次你点开 VideoDownloadHelper 看到地址出现在列表里时你就知道那是 9 层回退链在不到一秒钟内悄悄跑完的淘汰赛。【免费下载链接】VideoDownloadHelperChrome Extension to Help Download Video for Some Video Sites.项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表