我正在尝试使用 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。