【问题标题】:Control Firefox Download Prompt Using Selenium and Python使用 Selenium 和 Python 控制 Firefox 下载提示
【发布时间】:2016-07-19 12:36:52
【问题描述】:

这是我的代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2);
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", "/home/ripundeep/Desktop/Python Challenges /")    
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
profile.set_preference("browser.download.manager.focusWhenStarting", False)
profile.set_preference("browser.download.manager.useWindow", False)
profile.set_preference("browser.download.manager.showAlertOnComplete", False)
profile.set_preference("browser.download.manager.closeWhenDone", False)
profile.set_preference("browser.helperApps.neverAsk.openFile","text/csv")
profile.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")
profile.update_preferences()

driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
driver.find_element_by_css_selector("#id").send_keys("keyword")
WebDriverWait(driver, 1, poll_frequency=0.1).until(lambda drv:  len(drv.find_elements_by_css_selector("#ctl00_ContentPlaceHolder1_btnSubmit")) > 0)
driver.find_element_by_css_selector("#submitid").click()
driver.find_element_by_css_selector("#DownloadLinkId").click()

我想停止 Firefox 以显示下载提示并自动保存它,我尝试了所有可能的解决方案但没有奏效。请帮忙。

【问题讨论】:

  • 你能发布一些...所有可能的解决方案吗?
  • 第一个解决方案是在代码中......通过使用 selenium 更改 firefox 的配置文件。第二种解决方案,我在提示时检查了“不要再问我”,然后重新运行代码,但出现相同的位置。第三个解决方案是通过我可以在 Firefox 首选项或其他设置中手动进行的更改。但最终什么都没有奏效。当我运行代码提示时。

标签: python


【解决方案1】:

我记得提供更多 mime 类型的变体通常有助于解决这样的问题:

mime_types = [
    'text/plain', 
    'application/vnd.ms-excel', 
    'text/csv', 
    'application/csv', 
    'text/comma-separated-values', 
    'application/download', 
    'application/octet-stream', 
    'binary/octet-stream', 
    'application/binary', 
    'application/x-unknown'
]
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", ",".join(mime_types))

我也认为你不应该打电话给profile.update_preferences()


除此之外,以下是查看 Firefox 检测到的 mime 类型的步骤:

  • 使用 Firefox 选中“自动保存此文件类型”复选框手动下载文件
  • 打开帮助 -> 故障排除信息
  • 找到“个人资料文件夹”按钮,点击它
  • 在配置文件文件夹中找到mimeTypes.rdf 文件
  • 在文本编辑器中打开文件并查找其中提到的 MIME 类型 - 以 urn:mimetype 开头的 XML 节点属性值
  • 使用您在 browser.helperApps.neverAsk.saveToDisk 逗号分隔值中找到的 mimetypes

【讨论】:

  • @user3805995 更新了有关如何查看 Firefox 认为该文件属于什么 mime 类型的说明。希望对您有所帮助。
  • 仅供参考,mimeTypes.rdf 可能不再存在。 handlers.json 是一个可以查看的地方
【解决方案2】:

您可能拥有这个 firefox 配置文件,如果您使用的是 Python,那么您可以这样做:

profile = FirefoxProfile()
profile.set_preference("browser.download.panel.shown", False)
profile.set_preference("browser.helperApps.neverAsk.openFile","text/csv,application/vnd.ms-excel")
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.set_preference("browser.download.manager.showWhenStarting", False);
profile.set_preference("browser.download.manager.alertOnEXEOpen", False);
profile.set_preference("browser.download.manager.focusWhenStarting", False);
profile.set_preference("browser.download.folderList", 2);
profile.set_preference("browser.download.useDownloadDir", True);
profile.set_preference("browser.helperApps.alwaysAsk.force", False);
profile.set_preference("browser.download.manager.alertOnEXEOpen", False);
profile.set_preference("browser.download.manager.closeWhenDone", True);
profile.set_preference("browser.download.manager.showAlertOnComplete", False);
profile.set_preference("browser.download.manager.useWindow", False);
profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False);
profile.set_preference("pdfjs.disabled", True);
profile.set_preference("browser.download.dir", "C:\\Users\\***\\****\\Desktop\\Automation")
driver = webdriver.Firefox(firefox_profile = profile, executable_path = "Full file path to gecko driver.exe")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 2019-02-05
    • 2021-01-21
    • 2020-05-26
    • 1970-01-01
    • 2019-08-30
    • 2018-03-08
    • 2019-03-09
    相关资源
    最近更新 更多