2017-02-03 24 views
2

enter image description here火狐 - 51.0.1 硒 - 3.0.5 的Ubuntu - 16.04(64位)无法抑制的Firefox弹出一个文件下载

这里是我的代码如下所示:

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" 

请运行上面的代码,并看到弹出窗口。

这是我的错误:

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>' 

据我试过了,似乎是一个问题与我现在用的是新版本。 如果我错了,请纠正我。

+0

它不是一个弹出窗口,它是一个下载确认,并且您想要设置它,以便它永远不会询问是否保存。看看这个问题的答案:http://stackoverflow.com/questions/12759256/selenium-firefox-profile-for-saving-a-file(即'firefoxProfile.setPreference(“browser.helperApps.neverAsk.saveToDisk”,“ text/csv“);') –

+0

没有工作。我添加了我获得的对话框,当我点击URL –

回答

3

MIME类型让你失望。在你的例子中,你已经设置为'application/pdf'。我已经用wget下载了该文件以确定MIME类型。

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

应用/八位字节流的内容类型意味着服务器本身doesn't know what kind of file this could be。由于Selenium明确定义了它将在browser.helperApps.neverAsk.saveToDisk中接受的MIME类型,因此导致您的失败。

此配置文件将有助于自动下载不同类型的文件,包括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 
+1

谢谢....它的作品! –

+0

@TheRookie你可以考虑通过点击答案旁边的小+ 50按钮来奖励赏金。 – Cullub