Pythonselenium webdriver-动态更改下载目录

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

在定义Selenium Webdriver之前,明确定义下载目录,我们使用以下代码:

chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory" : "C:/data/cline"}
chromeOptions.add_experimental_option("prefs",prefs)
chromePath = "path to chromedriver"

driver = selenium.webdriver.chrome.webdriver.WebDriver(executable_path=chromePath, port=0,    chrome_options=chromeOptions, service_args=None, desired_capabilities=None,   service_log_path=None)

我想下载许多文件,每个文件都转到另一个(新创建的)目录。定义驱动程序后是否可以更改下载目录?

python selenium
3个回答
3
投票

我无法弄清楚如何做到这一点并使用了工作。 以下解决方案不是移动您下载的文件。 supperimentswithCode在此处给出了答案。 下面是他解决方案的一部分

def move_to_download_folder(downloadPath, newFileName, fileExtension): got_file = False ## Grab current file name. while got_file = False: try: currentFile = glob.glob(DOWNLOAD_PATH+"*"+fileExtension) got_file = True except: print "File has not finished downloading" time.sleep(20) ## Create new file name fileDestination = downloadPath+newFileName+fileExtension os.rename(currentFile, fileDestination) return

我只是尝试过这种方式在运行WebDriver期间更改下载文件夹:

2
投票
driver.command_executor._commands['send_command'] = ( 'POST', '/session/$sessionId/chromium/send_command') download_path = 'PATH/TO/MY/CURRENT/DESIRED' params = { 'cmd': 'Page.setDownloadBehavior', 'params': { 'behavior': 'allow', 'downloadPath': download_path } } driver.execute("send_command", params)

或:
download_path = 'PATH/TO/MY/CURRENT/DESIRED'
params = { 'behavior': 'allow', 'downloadPath': download_path }
driver.execute_cdp_cmd('Page.setDownloadBehavior', params['params'])

它不会更改Chrome的默认下载位置设置,但会将文件保存到随后的下载中的新给定文件夹(如果不存在的话,将创建)。

可能的解决方案可以将符号链接设置为 下载默认目录 您可以将解决方案组合在python

中的符号链接和自定义下载目录的设置中(这可以取决于OS上下文,我使用的是Ubuntu 22.04)。

0
投票
DRIVER_PATH = '/usr/bin/chromedriver' DEFAULT_DOWNLOAD_PATH = os.path.expanduser('~/Downloads') DOWNLOAD_PATH = os.path.abspath('./Downloads') def symlink(target, link_name, overwrite=False): ''' Create a symbolic link named link_name pointing to target. If link_name exists then FileExistsError is raised, unless overwrite=True. When trying to overwrite a directory, IsADirectoryError is raised. https://stackoverflow.com/questions/8299386/modifying-a-symlink-in-python/ ''' pass ### MAIN if __name__ == '__main__': service = Service(DRIVER_PATH) options = webdriver.ChromeOptions() prefs = {"download.default_directory": DOWNLOAD_PATH, "savefile.default_directory": DOWNLOAD_PATH} options.add_experimental_option("prefs", prefs) browser = webdriver.Chrome(service=service, options=options) os.mkdir('./t1') symlink('./t1', DOWNLOAD_PATH, overwrite=True) browser.get('https://archive.org/download/knotssplicesandr13510gut/13510.zip') os.mkdir('./t2') symlink('./t2', DOWNLOAD_PATH, overwrite=True) browser.get('https://archive.org/download/knotssplicesandr13510gut/13510-h.zip')

driver.set_preference("download.default_directory", "path/") trone这个变体

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.