2014-09-07 30 views
11

tumblr.comRuby: Phantom.js belirli bir sitede engellendi mi? Ben küçük bir komut dosyası otomatik hale getirmek Kapibara hortlak kullanıyorum

Benim Senaryo bana krom sürücüsü .. Ve benim Poltergeist sürücü yükler, diğer tüm web siteleri gayet güzel ile iyi çalışır, ama nedense bir Capybara::Poltergeist::StatusFailError atar zaman tumblr'ı yüklemeyi deneyin. üreme

Adımlar:

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

benim Google Chrome'un isteğini bakmak benim başlıkların tüm ayarlamak için çalıştı, ama o da düzeltmeye görünmüyor. Herhangi bir öneri var mı?

+0

Kafası karışmış. Poltergeist hata ayıklamak oldukça zor ama tumblr ziyaret neden bir '{'status' => 'fail'}' sonuçlanır anlayamıyorum. Selenyumda iyi çalışıyor ... – Anthony

+0

Baktığın için teşekkürler, zamanını gerçekten takdir ediyorum. Bunun neden bu kadar zor bir problem olduğunu anlayamıyorum? – BananaNeil

cevap

15

Sorun phantomjs SSL el sıkışma hatası ile ilgilidir. Sen göreceksin, benim gist alıp phantomjs ile çalıştırabilirsiniz:

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

geçici bir çözüm hayali olarak --ssl-protocol=any kullanmaktır biraz denetleme kod olacak böylece:

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 

çalışmak.

Referanslar:

+0

Bu Enrico için teşekkürler! – etusm

+0

Yine de bu sorunu dizüstü bilgisayarımda, ancak üretimde yaşıyorum. Bu rastgele bir başarısızlıktır. – Chamnap

+0

@Chamnap "Üretimde" ile ne demek istiyorsun? Poltergeist'i '--ignore-ssl-errors = yes' ve '--ssl-protocol = any' ile başlattın mı? –

İlgili konular