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

标签 python selenium selenium-webdriver web-scraping request

我正在尝试使用 Selenium 从网站下载一些视频.
不幸的是我不能download它来自源头,因为视频存储在访问受限的目录中,尝试使用 urllib 检索它们, requestsffmpeg返回 403 Forbidden错误,即使在将我的用户数据注入(inject)网站之后也是如此。
我想完整播放视频并存储 media文件来自 cache .
会不会有这种可能?在哪里可以找到自定义配置文件中的缓存文件夹?如何区分缓存中的文件?
编辑:这就是我尝试使用 requests 做的事情

import requests


def main():

    s = requests.Session()

    login_page = '<<login_page>>'
    login_data = dict()
    login_data['username'] = '<<username>>'
    login_data['password'] = '<<psw>>'

    login_r = s.post(login_page)

    video_src = '<<video_src>>'

    cookies = dict(login_r.cookies) # contains the session cookie

    # static cookies for every session
    cookies['_fbp'] = 'fb.1.1630500067415.734723547'
    cookies['_ga'] = 'GA1.2.823223936.1630500067'
    cookies['_gat'] = '1'
    cookies['_gid'] = 'GA1.2.1293544716.1631011551'
    cookies['user'] = '66051'

    video_r = s.get(video_src, cookies=cookies)
    print(video_r.status_code)



if __name__ == '__main__':
    main()

print() 函数返回:

403


这是视频的网络标签:
enter image description here

最佳答案

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

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)

如果需要,您可以在之前发送 head 请求,这样您就可以创建一个进度条,您将从 header 中检索完整的内容长度。
还有一个 403 是反僵尸系统常用的,可能是你的 Selenium 被检测到了。

关于python - 使用 Selenium 从缓存中提取媒体文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056930/

相关文章:

java - 无法将字符串值从 Web 元素转换为 double 值

python - chrome 驱动程序 headless 选项不适用于链接?

selenium - 测试立即失败,出现未知错误 : DevToolsActivePort file doesn't exist when running Selenium grid through systemd

python - 分配一 block 内存并立即在 C 中释放它失败

python - 在 python 3.4.3 中生成对象

python - 从 json 文件创建 Python 事件资源对象

python - 光滑的旋转木马在 Flask 中不起作用

selenium - 在 docker 容器内使用 selenium hub 有什么限制吗?

java - Firefox 的 Selenium 自动化在本地工作,但在服务器上失败

testing - 如何使用 selenium 网络驱动程序自动测试基于触摸和多点触摸的网络应用程序?