You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium从浏览器缓存提取媒体文件 解决视频下载403报错问题

方案可行性判断

这个方案是可行的,但存在两个限制场景:

  • 部分网站采用HLS/DASH分片流媒体传输,缓存中不会存在完整的视频文件,只会存储大量.ts格式的分片文件,你需要手动合并才能得到完整视频
  • 少部分网站会对缓存文件做加密处理,或者设置播放结束后自动清除缓存,这种场景下无法从缓存提取到可直接播放的媒体文件

自定义浏览器profile的缓存路径

不同浏览器的默认缓存路径不同,你也可以在Selenium启动浏览器时手动指定缓存目录,方便后续查找:

  • Chrome/Chromium:默认自定义profile缓存位于对应profile目录下的Cache文件夹
    • Windows:%USERPROFILE%\AppData\Local\Google\Chrome\User Data\<你的自定义profile名称>\Cache
    • Linux:~/.cache/google-chrome/<你的自定义profile名称>/Cache
    • Mac:~/Library/Caches/Google/Chrome/<你的自定义profile名称>/
    • Selenium手动指定缓存参数:options.add_argument("--disk-cache-dir=/your/custom/cache/path")
  • Firefox:默认自定义profile缓存位于对应profile目录下的Cache2文件夹
    • Windows:%USERPROFILE%\AppData\Local\Mozilla\Firefox\Profiles\<你的自定义profile字符串>\Cache2
    • Linux:~/.cache/mozilla/firefox/<你的自定义profile字符串>/Cache2
    • Mac:~/Library/Caches/Firefox/Profiles/<你的自定义profile字符串>/Cache2

缓存中目标媒体文件的区分方法

  • 提前清空缓存:在Selenium启动浏览器后、播放视频前,手动清空指定的缓存目录,播放完成后目录内新增的大文件就是目标媒体相关文件
  • 按大小筛选:视频文件/分片文件远大于普通的CSS、JS、图片资源,按文件大小倒序排列即可快速定位候选文件
  • 格式校验:缓存文件大多没有后缀,你可以通过文件魔数判断类型:mp4开头为00 00 00 18 66 74 79 70、webm开头为1A 45 DF A3、ts分片开头为47,匹配后修改对应后缀即可直接播放验证

原requests代码403问题修复

你当前的代码只携带了cookie,缺少了网站反爬校验的必要请求头,绝大多数网站都会校验User-Agent、Referer、Origin三个头字段,你可以从浏览器的对应视频请求详情中复制这三个字段的内容,加到请求参数中即可正常获取资源,修改示例如下:

import requests

def main():
    s = requests.Session()
    # 新增请求头,替换为你从浏览器请求中复制的实际值
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Referer": "https://你访问的视频所在页面的域名/",
        "Origin": "https://你访问的视频所在页面的域名"
    }
    s.headers.update(headers)

    login_page = '<<login_page>>'
    login_data = {
        'username': '<<username>>',
        'password': '<<psw>>'
    }
    # 登录请求也建议加上headers
    login_r = s.post(login_page, data=login_data)

    video_src = '<<video_src>>'
    # 不需要手动拼接cookie,Session会自动携带登录后获取的所有cookie
    video_r = s.get(video_src)
    print(video_r.status_code)
    # 验证成功后可以直接写入文件
    # with open("test.mp4", "wb") as f:
    #     f.write(video_r.content)

if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者master_glizzard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:48:02