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

使用Chrome驱动程序通过python和selenium在指定位置下载文件,python,google-chrome,selenium,download,driver,Python,Google Chrome,Selenium,Download,Driver,我正在尝试通过selenium的点击功能自动下载一些链接,并且使用chrome webdriver和python作为编程语言。如何通过python程序选择下载目录,使其不在默认下载目录中下载。我为firefox找到了一个解决方案,但每次点击链接时,下载对话框都会弹出,这在Chrome中是没有的。这是一个非代码级解决方案,没有Chrome评测/选项设置 如果您仅在本地计算机上使用脚本,请使用此解决方案 单击菜单->设置->显示高级设置…->下载 现在取消选中 下载前询问每个文件的保存位置 希望它能

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

这是一个非代码级解决方案,没有Chrome评测/选项设置

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

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

现在取消选中

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

希望它能帮助您:

2018年更新:

它不是有效的Chrome命令行开关,请参见下面的使用设置首选项

原件:

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

from selenium import webdriver

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

driver = webdriver.Chrome(chrome_options=options)

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

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)

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

要提供下载目录和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')

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

我在尝试执行与您完全相同的操作时也遇到了同样的问题:

对于铬:

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: 请关注此博客以获取答案:


博客上说了所有关于弹出和下载目录以及如何做的内容,这对我来说在ChromeV81.0.4044.138上很有效


使用prefs解决了我的问题

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)


转到“chrome设置”并选中“在下载之前要求保存每个文件”。这个问题的可能重复之处在于通过一个名为selenium的自动化系统控制chrome。你的回答就像他问你如何手动控制chrome一样。这是你必须做的一次性配置,是的,这是一个解决方案。实际上,tooThis是一个有效且有效的答案。这对我来说非常有效。请给这个答案打分。。我需要删除它,如果它将有负面的评级舒巴姆回答得很好。设置chrome配置文件的默认目录,然后它将成为解决方案。为什么需要导入选项?这似乎不起作用。也许Chromedriver的界面已经改变了?hoju的回答现在似乎起作用了。如果我们想下载一个视频,它就不起作用了。在chrome上播放视频而不是下载…现在如何下载视频?在mac上它对我不起作用,请尝试下面的ans:prefs={'download.default_directory':'/path/to/dir'};chrome\u选项。添加选项“prefs”,prefst此答案不推荐使用。可接受的答案应该改为Hoju的。Hoju干得好,谢谢!这真的解决了我的问题。然而,它似乎不适用于相对路径。e、 g.D:/ddd工作,而/tmp不工作。./tmp相对路径最终弹出一个对话框,让我手动选择目录……有没有办法在当前会话中更改下载路径,类似于单击Chrome设置->下载?我看到的答案总是需要构建新选项+新驱动程序+获得一个全新的会话。我不希望关闭当前会话,因为我的文件夹基于下拉列表中的每个项目进行分离,并且不需要重新加载新页面。该下拉列表中有数千项;接受的方法意味着关闭和加载页面数千次。它的作品!Mac google chrome 78.0.3904.97和chromedriver 2.40如何在WebDriver启动后更改默认目录?这一版本也适用于chrome 80.0.3987.149。我尝试了上面的其他答案,但它们在我的Ubuntu机器上不起作用。感谢@codewarkerditto使用81.0.4044.69。需要添加chrome_options=webdriver.ChromeOptionsalso:webdriver.Chromeoptions=blah取代webdriver.Chromechrome_options=blah我会使用chrome_options或选项以外的变量名以避免混淆。chrome_选项现在不推荐使用。如果我使用前面评论中提到的选项不起作用,我想知道为什么它不起作用。以上代码适用于我的Mac版Chrome 83
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)