set_preference在FireFox配置文件中无效

2 投票
2 回答
8436 浏览
提问于 2025-04-20 15:39

我有一个Python脚本,想要自动下载一个Excel文件。我直接设置了Firefox的配置,结果一切正常:

path = '\\path\\to\\firefox\\default\\profile\\'
fp = webdriver.FirefoxProfile(path)
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url') 
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()

但是当我尝试通过程序来设置配置时,就不行了;下载的弹窗还是会出现:

fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2)
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', os.getcwd())
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx')
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url') 
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()

我还把这一行代码 fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx') 改成了 fp.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/vnd.ms-excel'));但是结果没有变化。

有人知道我哪里出错了吗?

编辑 1:

我尝试了

fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")

还有

fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

结果依然没有变化。

2 个回答

0

在我用Java的时候,这个方法很好用,我觉得在Python里也能用。

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setAcceptUntrustedCertificates(true);
firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","C:\\Users\\Administrateur\\Downloads\\");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream");
driver = new FirefoxDriver(firefoxProfile);
7

根据about:config的说明,browser.helperApps.neverAsk.saveToDisk这个设置的值应该是用逗号分隔的MIME类型列表。

这个设置应该适合你:

fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")

示例(使用XLSX示例网页):

import os
from selenium import webdriver
import time

url = "http://file-sample.com/xlsx/"

# configuring profile
fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2)
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', os.getcwd())
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

# open the web page and download the file
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get(url)
driver.find_element_by_xpath('//div[@class="post-entry"]//a').click()
time.sleep(5)
driver.close()

结果是,文件会下载到当前的工作目录中。

撰写回答