微博网页中视频使用JS直接下载

825次阅读 23人点赞 作者: WuBin 发布时间: 2025-11-21 09:59:49
扫码到手机查看

JS下载微博视频

比如这个地址:https://h5.video.weibo.com/show/1034:4915132212641842,切换到手机版

发现里面视频如下:

<video id="krvwungh_176368990540664670_html5_api" class="krv-tech" tabindex="-1" autoplay="" src="//f.video.weibocdn.com/o0/9CIPKxl2lx086pDxV2bu01041202pvYd0E010.mp4?label=mp4_720p&amp;template=1280x720.25.0&amp;ori=0&amp;ps=IrBRQDE1x2Uj&amp;Expires=1763693503&amp;ssig=qn3Vtvjtg4&amp;KID=unistore,video" playsinline="true" webkit-playsinline="true" x5-playsinline="true"></video>

然后我们先用普通的方法:

// 1. 替换为你找到的视频真实地址(MP4 格式最佳)
const videoUrl = document.getElementById('video-id').src;

// 2. 创建 <a> 标签(用于触发下载)
const a = document.createElement("a");
a.href = videoUrl;

// 3. 设置下载文件名(可自定义,比如 "我的视频.mp4")
a.download = "weibo_video.mp4";

// 4. 触发点击下载
document.body.appendChild(a);
a.click();
document.body.removeChild(a);

console.log("下载已触发,请注意浏览器下载提示!");

这时候发现,浏览器不会自动下载,而是在一个新网页打开视频,直接打开视频还是403。

这时候可以考虑在网页中将视频转换为base64然后再下载:

// 1. 获取 video 元素 (请确保这个 ID 是正确的)
const video = document.querySelector('video');

// 2. 获取视频的真实播放地址
// 优先使用 video.currentSrc,如果它为空或无效,再回退到 video.src
const videoUrl = video.currentSrc || video.src;

if (!videoUrl) {
    console.error("无法找到视频地址。");
} else {
    console.log("找到视频地址:", videoUrl);

    // 3. 使用 fetch 下载视频数据
    fetch(videoUrl)
        .then(response => {
            // 检查响应是否成功
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            // 将响应体转换为 Blob 对象,指定 MIME 类型为 mp4
            return response.blob();
        })
        .then(blob => {
            // 4. 创建一个临时的 URL 指向这个 Blob 对象
            const blobUrl = URL.createObjectURL(blob);

            // 5. 创建 <a> 标签并设置属性
            const a = document.createElement('a');
            a.href = blobUrl;
            a.download = 'weibo_video.mp4'; // 你可以自定义文件名

            // 6. 触发下载
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);

            // 7. (重要) 释放临时 URL,防止内存泄漏
            URL.revokeObjectURL(blobUrl);

            console.log("下载已触发,请注意浏览器下载提示!");
        })
        .catch(error => {
            console.error("下载过程中出错:", error);
            alert("下载失败!可能是由于跨域限制或视频地址已失效。请查看控制台了解详细信息。");
        });
}

将上面这段代码,复制,然后在浏览器F12控制台中直接运行即可下载视频。

如果是blob

如果视频地址是blob:https://xxx开头(比如一些加密播放的视频),直接用上面的方法会下载失败,需要先解析出真实的视频源地址。

找到<video>标签,复制它的src属性(比如blob:https://weibo.com/xxx-xxx)。

在控制台解析 blob 地址

复制下面的代码,替换blobUrl,粘贴到控制台回车,会打印出真实的视频地址:

// 1. 替换为你找到的 blob 地址
const blobUrl = "blob:https://weibo.com/xxx-xxx"; // 这里替换为你的 blob 地址

// 2. 解析 blob 地址,获取真实视频源
async function getRealVideoUrl(blobUrl) {
  try {
    // 创建一个临时的 video 元素
    const video = document.createElement("video");
    video.src = blobUrl;
    
    // 等待视频元数据加载完成
    await video.play();
    await new Promise(resolve => video.onloadedmetadata = resolve);
    
    // 获取视频的真实源地址(可能是一个或多个分段地址)
    const sources = video.srcObject 
      ? Array.from(video.srcObject.getTracks()).map(track => track.src)
      : [video.currentSrc];
    
    console.log("解析到的真实视频地址:", sources);
    return sources;
  } catch (error) {
    console.error("解析失败:", error);
    return null;
  }
}

// 执行解析
getRealVideoUrl(blobUrl);

解析后会在控制台打印出 1 个或多个真实视频地址(通常是 MP4 或 M3U8 格式),复制其中的 MP4 地址,再用「方法一」的下载代码执行即可。

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:video,下载微博视频
推荐阅读
  • python基础-操作列表和迭代器

    python基础笔记-操作列表和迭代器的相关方法

    6765次阅读 169人点赞 发布时间: 2024-06-13 13:26:27 立即查看
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    12355次阅读 835人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    15544次阅读 656人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    16628次阅读 1325人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    18803次阅读 1512人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    17010次阅读 1376人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    32878次阅读 2580人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    28662次阅读 2205人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录