无法抑制Firefox弹出式文件下载 [英] Unable to suppress a firefox pop-up for a file download

查看:92
本文介绍了无法抑制Firefox弹出式文件下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Firefox-51.0.1 硒-3.0.5 Ubuntu-16.04(64bit)

Firefox - 51.0.1 Selenium - 3.0.5 Ubuntu - 16.04 (64bit)

这是我的代码的样子:

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = "/tmp/webdriver-downloads"
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf"
profile['pdfjs.disabled'] = true

driver = Selenium::WebDriver.for :firefox, :profile => profile
driver.get "https://s3.amazonaws.com/shopsocially-misc/vfs/vfs_test_sample.csv"

请运行上面的代码,然后您会看到弹出窗口.

Please run the above code and than you see the popup.

这是我得到的错误:

Selenium::WebDriver::Error::UnknownError: Failed to decode response from marionette
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/http/common.rb:85:in `new'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/http/common.rb:85:in `create_response'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/http/common.rb:63:in `call'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/w3c_bridge.rb:640:in `raw_execute'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/w3c_bridge.rb:615:in `execute'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/w3c_bridge.rb:126:in `get'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/common/navigation.rb:32:in `to'
    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/common/driver.rb:132:in `get'
    from (irb):70
    from /usr/bin/irb:11:in `<main>'

到目前为止,我尝试使用的新版本似乎存在问题. 如果我错了,请纠正我.

As far I tried, it seems an issue with the new versions I am using. Please correct me if I am wrong.

推荐答案

MIME类型使您绊倒.在您的示例中,您将其设置为"application/pdf".我已经用wget下载了文件,以确定mime类型.

The MIME type is tripping you up. In your example you have it set to 'application/pdf'. I have downloaded the file with wget to determine the mime type.

wget https://s3.amazonaws.com/shopsocially-misc/vfs/vfs_test_sample.csv
  ...
  Content-Type: application/octet-stream
Length: 200 [application/octet-stream]
...

应用程序/八位字节流的内容类型表示服务器本身文件可能是.由于Selenium在browser.helperApps.neverAsk.saveToDisk中明确定义了它将接受的MIME类型,所以这会导致您失败.

The content type of application/octet-stream means that the server itself doesn't know what kind of file this could be. Since Selenium is explicitly defining what MIME types it will accept in browser.helperApps.neverAsk.saveToDisk, this is causing your failure.

此配置文件将帮助自动下载不同类型的文件,包括 application/octet-stream .

This profile will help to automate downloading different types of files, including application/octet-stream.

# Create a firefox driver that can be passed to HeadlessBrowser.new
def start_driver
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile["browser.download.folderList"] = 2 # This allows downloads to be sent to a custom location
  profile["browser.download.manager.showWhenStarting"] = false
  profile["browser.download.dir"] = `/home/stefan/Downloads` # download to this custom path

   # FILES WILL NOT DOWNLOAD UNLESS THEIR MIME TYPE IS INCLUDED IN THIS LIST!
  profile["browser.helperApps.neverAsk.saveToDisk"] = accepted_mime_types_for_download

  driver = Selenium::WebDriver.for :firefox, :profile => profile
  return driver
end

def accepted_mime_types_for_download
  [ 
    "application/vnd.ms-exceltext/csv",
    "application/csv",
    "application/zip",
    "text/csv",
    "application/x-msexcel",
    "application/excel",
    "application/x-excel",
    "application/vnd.ms-excel",
    "image/png",
    "image/jpeg",
    "text/html",
    "text/plain",
    "application/msword",
    "application/xml",
    "application/octet-stream"
  ].join(",")
end

这篇关于无法抑制Firefox弹出式文件下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆