2014-09-07 18 views
11

Tôi đang sử dụng Capybara poltergeist để tự động hóa một kịch bản nhỏ trên tumblr.comRuby: Phantom.js bị chặn trên trang web cụ thể?

Kịch bản của tôi hoạt động tốt với người lái xe chrome của tôi .. Và tải lái xe poltergeist của tôi tất cả các trang web khác chỉ là tốt, nhưng đối với một số lý do ném một Capybara::Poltergeist::StatusFailError khi tôi cố gắng tải tumblr.

Các bước để tái tạo:

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

Tôi cố gắng để thiết lập tất cả các tiêu đề của tôi để tìm kiếm theo yêu cầu google chrome của tôi, nhưng điều đó cũng không có vẻ để sửa chữa nó. Có ai có bất cứ đề nghị?

+0

Liệt. Khá khó để gỡ lỗi poltergeist nhưng không thể tìm ra lý do tại sao truy cập tumblr kết quả trong một '{'status' => 'fail'}'. Hoạt động tốt trong selenium ... – Anthony

+0

Cảm ơn bạn đã xem xét nó, tôi thực sự đánh giá cao thời gian của bạn. Tôi không thể hiểu tại sao đây lại là một vấn đề khó giải quyết? – BananaNeil

Trả lời

15

Sự cố liên quan đến phantomjs SSL bắt tay không thành công. Bạn có thể mất gist của tôi và chạy với phantomjs, bạn sẽ thấy:

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

Kiểm tra một chút một workaround là sử dụng --ssl-protocol=any trong phantom, do đó, mã của bạn sẽ trở thành:

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 

Để làm việc.

Tài liệu tham khảo:

+0

Cảm ơn Enrico này! – etusm

+0

Tôi vẫn gặp sự cố này trên máy tính xách tay của mình, nhưng về sản xuất. Đó là một thất bại ngẫu nhiên. – Chamnap

+0

@Chamnap ý của bạn là gì về "sản xuất"? Bạn đã khởi tạo Poltergeist với '--ignore-ssl-errors = yes' và '--ssl-protocol = any' chưa? –

Các vấn đề liên quan