2016-06-11 3 views
0

私は、ポルターガイストとコピーブラを使って一連のウェブサイトにアクセスしようとしています。私は特定のウェブサイトとの奇妙な問題を抱えています:ポルターガイスト/ PhantomJS/Capybara/Nokogiriを使用してサイトを削るのが難しい。ウェブサイト上で開催中

require 'nokogiri' 
require 'capybara/poltergeist' 
slate = "http://www.slate.com" 
OPTIONS = {:js_errors => false, :debug => true, :timeout => 120, :phantomjs_options => ['--ignore-ssl-errors=false', '--load-images=false']} 
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1" 

Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, OPTIONS) 
end 

session = Capybara::Session.new(:poltergeist) 

session.driver.headers = {"User-Agent" => USER_AGENT} 

session.visit slate 

私が得る応答が奇数であり、他のサイトとは違って、私はこのように訪れています:ここでhttp://www.slate.com/

は、スクリプトの基本的な要素があります。 session.visitで[object Object]を返し、要求が成功し、IRBプロンプトが返されます。しかし、私は約5秒か10秒後に私のプロンプトtimeout timeoutに自動的に入り、次にMySlateData data is empyになります。

irb(main):016:0> session.visit slate 
[object Object] 
=> {"status"=>"success"} 
irb(main):017:0> timeout timeout 
MySlateData data is empty 

なぜ応答が奇妙な方法でセッションを保持しているように見えるのでしょうか?私がデバッグでOPTIONSを実行すると、私は本当にそれほど有用ではありません。何らかの理由で

irb(main):014:0> session.visit slate 
{"id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","name":"visit","args":["http://www.slate.com"]} 
[object Object] 
{"command_id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","response":{"status":"success"}} 
=> {"status"=>"success"} 
irb(main):015:0> timeout timeout 
MySlateData data is empty 

それは鋸山にロードするHTMLに干渉だので、私はこすり結果のHTMLにできませんよ。

+0

ポルターガイストとPhantomJSのどのバージョンを使用していますか? –

+0

ポルターガイストは1.8.1で、PhantomJSは2.0.0 – roy

答えて

0

カピバラはあなたのセッションを保持していません。 Poltergeist/PhantomJSはあなたのコードから非同期的に "ブラウザ"を実行しています - あなたが見ている余分なコンテンツはあなたが訪れたウェブサイトからのコンソールログの出力です。最近のバージョンのpoltergeist(1.9+)とphantomjs(2.1.1+)を使用していることを確認すると、ページにエラーが少なくなるため、一部を削除することがあります。

+0

ですが、それは理にかなっていますが、何らかの理由で、これらのエラーがノコギリを使用してページから情報を掻き取ろうとするのを妨げているようです。多分それは別の質問です。今すぐアップグレードしてください。 – roy

+0

エラーが発生すると、実際に正しく読み込まれていないことが一般的にわかるため、情報をスクレイプしようとすると、間違いが発生します。 –

関連する問題