【问题标题】:set_preference does not work on FireFox profileset_preference 不适用于 FireFox 配置文件
【发布时间】:2014-09-09 12:10:34
【问题描述】:

我有一个尝试自动下载 excel 文件的 python 脚本。我尝试直接解决 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")

结果没有变化。

【问题讨论】:

    标签: python firefox selenium-webdriver webdriver download


    【解决方案1】:

    根据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 Sample网页):

    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()
    

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

    【讨论】:

    • @ZeinabAbbasi 你能检查正在下载的文件有什么 mime-type 吗?
    • 它的扩展名是.xlsx。这是一个 Microsoft Excel 2007 文件。但我不知道如何从代码中检查它的 mime 类型。可以帮忙吗?
    • 我找到了 mime 类型 here 并将 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 添加到列表中,但我得到了相同的结果。
    • @ZeinabAbbasi 谢谢,我已经用一个适用于我的示例代码编辑了答案 - 你可以按原样运行它并查看文件是否已下载?
    • @ZeinabAbbasi:This page 可以帮助您确定要使用的正确 MIME 类型。
    【解决方案2】:

    这在 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);
    

    【讨论】:

      猜你喜欢
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多