我正在使用Selenium Webdriver(在Python中)自动下载数千个文件。我想以编程方式设置Chrome的下载文件夹。阅读this后,我尝试了这个:
chromepath = '/Users/thiagomarzagao/Desktop/searchcode/chromedriver'
desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/'}}}
driver = webdriver.Chrome(executable_path = chromepath, desired_capabilities = desired_caps)
不好。下载仍然会转到默认下载文件夹(“/ Users / thiagomarzagao / Downloads”)。
有什么想法吗?
(Python 2.7.5,Selenium 2.2.0,Chromedriver 2.1.210398,Mac OS X 10.6.8)
答案 0 :(得分:46)
以下对我有用:
chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory" : "/some/path"}
chromeOptions.add_experimental_option("prefs",prefs)
chromedriver = "path/to/chromedriver.exe"
driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chromeOptions)
来源:https://sites.google.com/a/chromium.org/chromedriver/capabilities
答案 1 :(得分:7)
如果有人仍然遇到问题并且上述解决方案无效,我发现在我的下载路径中添加了以下斜杠(' \')。
我看起来像这样: if browser == 'chrome':
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)
return webdriver.Chrome(executable_path=Base.chromedriver_dir, chrome_options=options)
答案 2 :(得分:3)
我认为你还需要
"directory_upgrade": true
直接在Chrome的“Prefrences”文件中使用字典,在本地Windows版本的Chrome版本28.0.1500.95 m上安装,并提供以下下载选项:
"download": {
"default_directory": "C:\\Users\\rdub\\Desktop",
"extensions_to_open": ""
},
我获得默认位置,而不是桌面。当我把它更改为:
"download": {
"default_directory": "C:\\Users\\rdub\\Desktop",
"directory_upgrade": true,
"extensions_to_open": ""
},
我得到桌面位置。
尝试以下方法:
desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/', "directory_upgrade": true, "extensions_to_open": ""}}}
答案 3 :(得分:1)
我在这个问题中尝试了所有的问题,但是对于我的 Ubuntu 16.10 它不起作用。所以我在os.environ中为变量 XDG_DOWNLOAD_DIR 添加了更改。哪个不起作用,但我认为这有帮助。
那是:
os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory
真正适合我的真正改变是在执行时通过系统调用 xdg-user-dirs-update 命令设置下载文件夹:
os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory)
因此,我设置下载目录的所有代码如下:
import os
from selenium import webdriver
default_download_directory = str(os.path.dirname(os.path.abspath(__file__))) + "/download"
os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory
os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory)
desired_caps = {
'prefs': {
'download': {
'default_directory': str(os.path.dirname(os.path.abspath(__file__))) + "/download",
"directory_upgrade": "true",
"extensions_to_open": ""
}
}
}
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=" + str(os.path.dirname(os.path.abspath(__file__))) + "/download")
browser = webdriver.Chrome(chrome_options=options, desired_capabilities=desired_caps)
答案 4 :(得分:1)
注意: .py文件和文件夹“ PDF_Folder”在相同的位置和文件都应下载到 文件夹“ PDF_Folder”
exepath = sys.arg[0]
# get the path from the .py file
Dir_path = os.path.dirname(os.path.abspath(exepath))
# get the path of "PDF_Folder" directory
Download_dir = Dir_path+"\\PDF_Folder\\"
preferences = {"download.default_directory": Download_dir , # pass the variable
"download.prompt_for_download": False,
"directory_upgrade": True,
"safebrowsing.enabled": True }
chrome_options.add_experimental_option("prefs", preferences)
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=r'/pathTo/chromedriver')
driver.get("urlfiletodownload");
答案 5 :(得分:1)
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
temp_directory = ""
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--verbose')
chrome_options.add_experimental_option("prefs", {
"download.default_directory": "<path to the folder of download>",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing_for_trusted_sources_enabled": False,
"safebrowsing.enabled": False
})
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-software-rasterizer')
url = "https://www.thinkbroadband.com/download"
driver = webdriver.Chrome(executable_path = './chromedriver' ,chrome_options = chrome_options)
driver.get(url)
time.sleep(5)
driver.find_element_by_css_selector("div.module:nth-child(8) > p:nth-child(1) > a:nth-child(1) > img:nth-child(1)").click()
答案 6 :(得分:0)
对于任何人仍然想知道为什么他们的实现不起作用:你必须把它的全部路径工作。例如'/ Users / you / dlfolder'不起作用,而'C:/ Users / you / dlfolder'会。
答案 7 :(得分:0)
这似乎对我有用
chrome_options = webdriver.ChromeOptions()
settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
}
prefs = {'savefile.default_directory': '/Users/gregreynders/PycharmProjects/Webscraper'}
chrome_options.add_experimental_option('prefs', prefs)
chrome_options.add_argument('--kiosk-printing')
driver = webdriver.Chrome(chrome_options=chrome_options , executable_path="/Applications/chrome/chromedriver" )
driver.get("https://google.com")
driver.execute_script('window.print();')
driver.quit()