2014-09-07 11 views
11

ich Capybara Poltergeist bin mit auf ein kleines Skript zu automatisieren tumblr.comRuby: Phantom.js auf einer bestimmten Website blockiert?

Mein Skript mit meinem Chrom-Treiber .. Und mein Poltergeist Treiber lädt alle anderen Websites aus irgendeinem Grund ganz gut funktioniert gut, aber ein Capybara::Poltergeist::StatusFailError wirft, wenn ich versuche tumblr zu laden.

Schritte zur Reproduktion:

$ 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? 

Ich habe versucht, alle meine Header zu setzen meine Google Chrome Wunsch zu sehen, aber das scheint auch nicht, es zu beheben. Hat jemand irgendwelche Vorschläge?

+0

Stumped. Es ist ziemlich schwer, den Poltergeist zu debuggen, kann aber nicht herausfinden, warum der Besuch von tumblr zu einem '{'status' => 'fail'}' führt. Funktioniert gut in Selen ... – Anthony

+0

Vielen Dank für den Blick, ich schätze Ihre Zeit sehr. Ich kann nicht verstehen, warum dies ein so schwer zu lösendes Problem ist. – BananaNeil

Antwort

15

Das Problem bezieht sich auf Phantomjs SSL-Handshake-Fehler. Sie können meine gist und laufen mit PhantomJS zu nehmen, werden Sie sehen:

[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") 

ein wenig Überprüfung eine Abhilfe --ssl-protocol=any in Phantom zu verwenden ist, so dass Ihr Code werden wird:

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 

zu arbeiten.

Referenzen:

+0

Danke für diesen Enrico! – etusm

+0

Ich stehe immer noch dieses Problem auf meinem Laptop, aber auf der Produktion. Es ist ein zufälliger Fehler. – Chamnap

+0

@Chamnap was meinst du mit "on production"? Haben Sie Poltergeist mit '--ignore-ssl-errors = yes' und '-ssl-protocol = any' initialisiert? –

Verwandte Themen