【问题标题】:Downloading a file at a specified location through python and selenium using Chrome driver使用Chrome驱动程序通过python和selenium在指定位置下载文件
【发布时间】:2016-05-21 18:54:23
【问题描述】:

我正在尝试通过 selenium 的点击功能自动下载一些链接,并且我使用 chrome webdriver 和 python 作为编程语言。 如何通过python程序选择下载目录,以免下载到默认的Downloads目录。我找到了 firefox 的解决方案,但是每次单击 Chrome 中不会发生的链接时,下载对话框都会不断弹出。

【问题讨论】:

标签: python google-chrome selenium download driver


【解决方案1】:

我发现接受的解决方案不起作用,但是这个微小的变化确实有效:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : '/path/to/dir'}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)

【讨论】:

  • 干得好,Hoju,
  • 谢谢!这真的解决了我的问题。但是,它似乎不适用于相对路径。例如D:/ddd 有效,而 ./tmp 无效。 ./tmp(相对路径)最终会弹出一个对话框让我手动选择目录...
  • 有没有办法在 当前会话 上更改下载路径,类似于单击 Chrome 设置->下载的方式?我看到的答案总是导致 build new option + new driver + get a whole new session 。我不希望关闭当前会话,因为我的文件夹分离基于下拉列表中的每个项目,并且无需重新加载新页面。该下拉列表中有数千个项目;接受的方法意味着关闭和加载页面数千次。
  • 成功了! Mac google chrome 78.0.3904.97chromedriver 2.40
  • WebDriver启动后如何更改默认目录?
【解决方案2】:

2018 年更新:

它不是有效的 Chrome 命令行开关,请参阅下面的 source code 使用 hoju answer 来设置首选项。

原文:

您可以为 chrome 创建配置文件并定义测试的下载位置。这是一个例子:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("download.default_directory=C:/Downloads")

driver = webdriver.Chrome(chrome_options=options)

【讨论】:

  • 为什么需要import Options
  • 这似乎不起作用。也许 Chromedriver 的界面发生了变化? hoju 的反应现在似乎奏效了。
  • 如果我们想下载一个视频是行不通的..在 chrome 上播放视频而不是下载...现在如何下载视频?
  • 这在 mac 中不适合我,请尝试以下答案:prefs = {'download.default_directory' : '/path/to/dir'}; chrome_options.add_experimental_option('prefs', prefs)
  • 不推荐使用此答案。可接受的答案应改为 Hoju 的。
【解决方案3】:

我在尝试做你想做的事情时也遇到过的确切问题:)

对于 chrome

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
prefs = {"profile.default_content_settings.popups": 0,
             "download.default_directory": 
                        r"C:\Users\user_dir\Desktop\\",#IMPORTANT - ENDING SLASH V IMPORTANT
             "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
browser=webdriver.Chrome(<chromdriver.exe path>, options=options)

对于 Firefox: 请关注此博客以获取答案: https://srirajeshsahoo.wordpress.com/2018/07/26/how-to-bypass-pop-up-during-download-in-firefox-using-selenium-and-python/

该博客介绍了弹出窗口和下载目录以及如何操作

【讨论】:

    【解决方案4】:

    使用首选项解决了我的问题

    path = os.path.dirname(os.path.abspath(__file__))
    prefs = {"download.default_directory":path}
    options = Options()
    options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome('../harveston/chromedriver.exe',options = options)
    

    【讨论】:

      【解决方案5】:

      这在 Chrome v81.0.4044.138 上对我有用

      preferences = {
                      "profile.default_content_settings.popups": 0,
                      "download.default_directory": os.getcwd() + os.path.sep,
                      "directory_upgrade": True
                  }
      
      chrome_options.add_experimental_option('prefs', preferences)
      browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
      

      【讨论】:

      • 这个也适用于Chrome 80.0.3987.149。我尝试了上面的其他答案,但它们在我的 Ubuntu 机器上不起作用。谢谢@CodeWalker
      • 同上使用 81.0.4044.69。需要添加 chrome_options = webdriver.ChromeOptions()
      • also: webdriver.Chrome(options=blah) superceedes webdriver.Chrome(chrome_options=blah) 我会使用 chrome_options 或 options 以外的变量名以避免混淆。
      • chrome_options 现已弃用。如果我使用前面评论中提到的选项不起作用(我想知道为什么它不起作用)。上面的代码适用于我的 Chrome 版本 83 的 Mac
      【解决方案6】:

      要提供下载目录和chrome的dive可执行路径,请使用以下代码。

      from selenium import webdriver
      options = webdriver.ChromeOptions() 
      options.add_argument("download.default_directory=C:/Your_Directory")
      driver = webdriver.Chrome(options=options ,executable_path='C:/chromedriver')
      

      相应地更改代码中的路径。

      【讨论】:

        【解决方案7】:

        如果你使用的是 linux 发行版

        使用此代码

        prefs = {'download.prompt_for_download': False,
                 'download.directory_upgrade': True,
                 'safebrowsing.enabled': False,
                 'safebrowsing.disable_download_protection': True}
        
        options.add_argument('--headless')
        options.add_experimental_option('prefs', prefs)
        driver = webdriver.Chrome('chromedriver.exe', chrome_options=options)
        driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
        driver.desired_capabilities['browserName'] = 'ur mum'
        params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': r'C:\chickenbutt'}}
        driver.execute("send_command", params)
        

        【讨论】:

          【解决方案8】:

          我看到很多人有同样的问题,只是在末尾添加反斜杠

          op = webdriver.ChromeOptions()
          prefs = {'download.default_directory' : 'C:\\Users\\SAJComputer\\PycharmProjects\\robot-test\\'}
          op.add_experimental_option('prefs', prefs)
          driver = webdriver.Chrome(executable_path=driver_path , options=op)
          

          【讨论】:

            【解决方案9】:

            以下代码 sn-p 适用于 Windows/linux/MacOs 发行版:

                downloadDir = f"{os.getcwd()}//downloads//"
                # Make sure path exists.
                Path(downloadDir).mkdir(parents=True, exist_ok=True)
                
                # Set Preferences.
                preferences = {"download.default_directory": downloadDir,
                               "download.prompt_for_download": False,
                               "directory_upgrade": True,
                               "safebrowsing.enabled": True}
            
                chromeOptions = webdriver.ChromeOptions()
                chromeOptions.add_argument("--window-size=1480x560")
                chromeOptions.add_experimental_option("prefs", preferences)
            
                driver = webdriver.Chrome(DRIVER_PATH, options=chromeOptions)
                driver.get(url)
                time.sleep(10)
                driver.close()
            

            【讨论】:

              【解决方案10】:

              这是没有 chrome 分析/选项设置的非代码级解决方案。

              如果您仅在本地计算机上使用脚本,请使用此解决方案

              点击菜单 -> 设置 -> 显示高级设置... -> 下载

              现在取消选中

              在下载前询问每个文件的保存位置

              希望对你有帮助:)

              【讨论】:

              • 这个问题是关于通过称为 selenium 的自动化系统控制 chrome。你回答得好像他问手动控制 chrome。
              • 这是您必须进行的一次性配置,是的,它也是一种解决方案
              • 这实际上是一个有效且有效的答案。它对我来说非常有效。
              • 请评价这个答案..如果它有负面评价,我需要删除它
              • Shubam 回答得很好。设置您的 chrome 配置文件的默认目录,然后它将成为解决方案。
              猜你喜欢
              • 2018-10-09
              • 1970-01-01
              • 1970-01-01
              • 2014-10-04
              • 1970-01-01
              • 1970-01-01
              • 2022-06-22
              • 1970-01-01
              相关资源
              最近更新 更多