3

我正在尝试使用 selenium 在网页中自动下载文件。例如,我们可以考虑我将尝试从https://github.com/mozilla/geckodriver/releases自动下载 geckodriver 。

我的python代码如下:

那是我使用的代码:

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList",2)
profile.set_preference("browser.download.manager.showWhenStarting",False)
profile.set_preference("browser.download.dir", path)
profile.set_preference("browser.download.downloadDir", path)
profile.set_preference("browser.download.defaultFolder", path)
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip, application/tar+gzip, application/x-gtar, application/x-compressed")
profile.set_preference("pdfjs.disabled", True)
profile.update_preferences()
browser =  webdriver.Firefox(profile)
browser.get('https://github.com/mozilla/geckodriver/releases')

sleep(5)
try:
    field = browser.find_element_by_xpath("//ul[@class='release-downloads']//li/a/strong[contains(text(),'geckodriver-v0.11.1-linux64.tar.gz')]")
    if(field != None):
    field.click()
    find = True
except Exception,e: 
    print str(e)

我的问题是,如果我尝试这段代码,我会得到 firefox 的弹出式下载:

在此处输入图像描述

我想也许我设置了偏好 browser.helperApps.neverAsk.saveToDisk 的错误值,所以我尝试下载 zip 文件,但我遇到了同样的问题。然后我查看了 about:config 但不幸的是我发现参数设置为默认值。例如,我发现 browser.download.folderList 的值为 1 但不是 2:

在此处输入图像描述

browser.helperApps.neverAsk.saveToDisk 也是 null 值,并且 browser.download.dir 不存在。

编辑:在不设置首选项的情况下下载

然后我尝试不使用此代码设置首选项:

browser =  webdriver.Firefox()
browser.get('https://github.com/mozilla/geckodriver/releases')

sleep(5)
try:
    field = browser.find_element_by_xpath("//ul[@class='release-downloads']//li/a/strong[contains(text(),'geckodriver-v0.11.1-linux64.tar.gz')]")
    if(field != None):
    field.click()
    find = True
except Exception,e: 
    print str(e)
    pass

但是我遇到了同样的问题,比如我删除的设置首选项部分没有任何影响。但考虑到如果我手动打开 Firefox 并在下载链接中手动单击,我可以使用 Firefox 的确认弹出窗口直接下载文件,没有任何问题。

我的代码有错误吗?或者有什么问题?

开发环境:Python2.7、selenium3.0.1、Firefox 49。

4

1 回答 1

0

您应该使用分号来分隔 mime 类型:

profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip;application/tar+gzip;application/x-gtar;application/x-compressed")

于 2016-12-15T16:53:35.650 回答