【问题标题】:Python using webbroswer.open() to download a filePython 使用 webbrowser.open() 下载文件
【发布时间】:2020-05-12 07:49:25
【问题描述】:

我了解如何使用 webbrowser 调用 chrome 来访问 url,但是,如果该 url 导致下载,我将如何自动将文件保存到指定的目标?

这是我所拥有的:

import webbrowser
import os

url = 'https://videos.com/test.mp4'
path = os.getcwd() + '/video.mp4'

chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'

file = webbrowser.get(chrome_path).open(url)
with open(path, "wb") as f:
    f.write(file)

这不起作用,因为 chrome 在访问 url 时会询问目的地,我希望 chrome 根据 python 的输入自动保存文件。我知道我可以使用 chrome 手动执行此操作,但是,我会下载很多视频,这就是我想节省时间的原因。

这里有什么解决办法还是不可能?

【问题讨论】:

  • 要使用webbrowser 执行此操作,您应该在 Chrome 中禁用“提示下载位置”设置,这样您就可以自动保存文件,而无需每次都询问目的地。但是,如果您想要以编程方式指定目的地是什么,那么我不知道您是否可以使用 webbrowser 做到这一点,但您绝对可以使用 selenium 做到这一点:stackoverflow.com/questions/35331854/…
  • @telex-wap 感谢您的回复,我正在考虑使用 selenium,但是,我正在寻找 python 来访问当前的 chrome 会话,而不是打开一个新实例

标签: python python-3.x python-webbrowser


【解决方案1】:

我认为您会发现这是与浏览器交互的更好方式。

from pyppeteer import launch
import asyncio

url = 'https://videos.com/test.mp4'

async def main():
    global browser

    #pyppeteer built-in chromium
    browser = await launch(headless=False)
    # or
    # browser = await launch() #for headless

    # or with Your native browser    
    # browser = await launch(headless=False, executablePath='C:\\Program Files 
    #(x86)\\Google\\Chrome\\Application\\chrome.exe', 
    #userDataDir="\\Local\\Google\\Chrome\\User Data")
    page = await browser.newPage()
    await page.goto(url)
    (code to target video selector and write video here)

    await browser.close()

run = asyncio.run(main())

您是否尝试过 yl-downloader 的目标 URls? 这可能是一个更简单的选择

https://github.com/ytdl-org/youtube-dl/blob/master/README.md#readme

【讨论】:

猜你喜欢
  • 2011-02-07
  • 2017-10-23
  • 2014-03-27
  • 2012-12-07
  • 1970-01-01
  • 2012-06-15
  • 2020-08-03
相关资源
最近更新 更多