使用Chrome驱动通过python和selenium下载指定位置的文件

问题描述 投票:0回答:12

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

python google-chrome selenium download driver
12个回答
131
投票

我发现接受的解决方案不起作用,但是这个微小的改变却起作用了:

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)

27
投票

2018 年更新:

它不是有效的 Chrome 命令行开关,请参阅源代码使用下面的hoju回答来设置首选项。

原文:

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

from selenium import webdriver

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

driver = webdriver.Chrome(chrome_options=options)

15
投票

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

对于 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/

博客介绍了有关弹出窗口和下载目录以及如何操作的所有信息


5
投票

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

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)

4
投票

这在 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)

1
投票

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

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)

1
投票

2022 年更新:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

prefs = {"download.default_directory" : "C:\YourDirectory\Folder"}

options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

0
投票

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

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')

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


0
投票

如果您使用的是 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)

0
投票

下面的代码片段适用于 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()

0
投票

2023 年更新

此功能适用于 Chromedriver 版本。 117.0.5938.149

驱动程序 = webdriver.Chrome() chromeOptions = webdriver.ChromeOptions() prefs = {"download.default_directory" : "C:\Users\path\"} #<< don't forget \ behind your path chromeOptions.add_experimental_option("prefs",prefs) driver = webdriver.Chrome(chrome_options=chromeOptions)

#chrome driver.exe 和你的 .py 文件位于同一文件夹中


-8
投票

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

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

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

现在取消选中

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

希望对你有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.