使用 Selenium 从缓存中提取媒体文件

mas*_*ard 7 python request web-scraping selenium-webdriver

我正在尝试使用 从网站下载一些视频Selenium

\n

不幸的是,我无法从源下载它,因为视频存储在访问受限的目录中,尝试使用 检索它们urllibrequests或者ffmpeg返回错误403 Forbidden,即使在将我的用户数据注入网站之后也是如此。

\n

我正在考虑完整播放视频并从缓存中存储媒体文件。

\n

有可能吗?在哪里可以找到自定义配置文件中的缓存文件夹?如何区分缓存中的文件?

\n

编辑:这是我尝试使用的requests

\n
import requests\n\n\ndef main():\n\n    s = requests.Session()\n\n    login_page = \'<<login_page>>\'\n    login_data = dict()\n    login_data[\'username\'] = \'<<username>>\'\n    login_data[\'password\'] = \'<<psw>>\'\n\n    login_r = s.post(login_page)\n\n    video_src = \'<<video_src>>\'\n\n    cookies = dict(login_r.cookies) #\xc2\xa0contains the session cookie\n\n    # static cookies for every session\n    cookies[\'_fbp\'] = \'fb.1.1630500067415.734723547\'\n    cookies[\'_ga\'] = \'GA1.2.823223936.1630500067\'\n    cookies[\'_gat\'] = \'1\'\n    cookies[\'_gid\'] = \'GA1.2.1293544716.1631011551\'\n    cookies[\'user\'] = \'66051\'\n\n    video_r = s.get(video_src, cookies=cookies)\n    print(video_r.status_code)\n\n\n\nif __name__ == \'__main__\':\n    main()\n\n
Run Code Online (Sandbox Code Playgroud)\n

print() 函数返回:

\n
\n

403

\n
\n

这是视频的网络选项卡:

\n

在此输入图像描述

\n

小智 0

关于video_r = s.get(video_src, cookies=cookies)您是否尝试过流式传输响应?它发送正确的字节范围标头来下载视频。大多数网站都阻止将文件下载为“一个”块。

with open('...', 'wb') as f:
     response = s.get(url=link, stream=True)
            
     for chunk in response.iter_content(chunk_size=512):
         if chunk:  # filter out keep-alive new chunks
             f.write(chunk)

Run Code Online (Sandbox Code Playgroud)

如果需要,您可以之前发送一个 head 请求,这样您就可以创建一个进度条,您将从 header 中检索完整的内容长度。

另外,403 是反机器人系统常用的,可能是您的硒被检测到。