I am using capybara poltergeist to automate a small script on tumblr.com
My script works fine with my chrome driver.. And my poltergeist driver loads all other websites just fine, but for some reason throws a Capybara::Poltergeist::StatusFailError
when I try to load tumblr.
Steps for reproduction:
$ brew install phantomjs
$ gem install capybara
$ gem install poltergeist
$ gem install selenium-webdriver
$ irb
require 'capybara/poltergeist'
module Drivers
class Poltergeist < Capybara::Poltergeist::Driver
def needs_server?
false
end
end
end
Capybara.register_driver :poltergeist_errorless do |app|
Drivers::Poltergeist.new(app, js_errors: false, timeout: 10000, phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes'])
end
session = Capybara::Session.new(:poltergeist_errorless)
session.visit('https://google.com') # This works fine
session.visit('https://tumblr.com') # This does not work?
I tried to set all of my headers to look my google chrome's request, but that also does not seem to fix it. Does anyone have any suggestions?
The problem is related to phantomjs SSL handshake fail. You can take my gist and run with phantomjs, you will see:
[cut]
= onResourceError()
- unable to load url: "https://www.tumblr.com/"
- error code: 6, description: SSL handshake failed
= onResourceReceived()
id: 3, stage: "end", response: {"contentType":null,"headers":[],"id":3,"redirectURL":null,"stage":"end","status":null,"statusText":null,"time":"2014-09-16T12:06:05.547Z","url":"https://www.tumblr.com/"}
= onLoadFinished()
status: fail
DONE WITH fail WebPage(name = "WebPage")
Checking a little bit a workaround is to use --ssl-protocol=any
in phantom, so your code will become:
Capybara.register_driver :poltergeist_errorless do |app|
Drivers::Poltergeist.new(app, js_errors: false, timeout: 10000, phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=any'])
end
To work.
References:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With