如何在webdriver运行时更改默认下载文件夹?

时间:2014-05-27 18:36:21

标签: python google-chrome selenium download preferences

我正在下载几个不同的数据集,并希望将每个文件(或集)下载到特定文件夹。我已经学会了如何在这些页面上更改下载目录:

setting Chrome preferences w/ Selenium Webdriver in Python

Change the default chrome download folder webdriver C#

问题是这些方法只允许我在打开webdriver时更改下载目录。到达下载页面需要一段时间,因此这样做是一种无效的解决方案。我已尝试设置首选项,但我在python中使用selenium webdriver和chrome,我无法在SO或python帮助中找到任何内容。即使在新驱动程序上切换窗口手柄也不会起作用,因为它无法抓住另一个驱动程序已经打开的窗口。

下载网站的链接已自定义,因此无法复制并粘贴到新驱动程序中。到目前为止,我一直在使用操作系统。模块来获取每个新文件的名称,但即使这是不可靠的,因为下载时间不同。

如果有人知道如何在webdriver运行时将默认设置更改为webdriver,那将会很棒。谢谢!

2 个答案:

答案 0 :(得分:2)

过去,我已经通过下载到临时文件夹然后将文件重命名为相应的文件夹来解决这个问题:

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

## Click element to download file
inputElement=driver.find_element_by_xpath("{xpath here}").click()

move_to_download_folder(downloadPath, newFileName, fileExtension)

答案 1 :(得分:0)

我使用了 chromeOptions 实验方法。

##set download directory
chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory": "your directory path"}
chromeOptions.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', 
chrome_options=chromeOptions)

在此示例中,我的 chromedriver 位于 /usr/bin 中。唯一的缺点是您必须根据浏览器更新使 chromedriver 保持最新。因此,当您更新浏览器时,您必须更新 chromedriver。

这对我有用。