3

私は phantomjs から空のドキュメントを取得しています。Capybara 用の phantomjs ドライバーをセットアップするために、Capybara と Poltergeist を使用しようとしています。

次のようにモジュールを作成し、接続に必要なファイルに含めました。

require 'capybara/poltergeist'

  module Parser
    module JSParser
      include Capybara

      # Create a new PhantomJS session in Capybara
      def new_session
        # Register PhantomJS (aka poltergeist) as the driver to use
        Capybara.register_driver :poltergeist do |app|
          Capybara::Poltergeist::Driver.new(app, :debug => true)
        end

        # Use XPath as the default selector for the find method
        Capybara.default_selector = :xpath
        Capybara.javascript_driver = :poltergeist
        Capybara.current_driver = :poltergeist
        # Start up a new thread
        @session = Capybara::Session.new(:poltergeist)

        # Report using a particular user agent
        @session.driver.headers = { 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X)' }

        # Return the driver's session
        @session
      end

      # Returns the current session's page
      def html
        @session.html
      end

    end
  end

次に、次のようにページをロードします。

class Loader
  include Parser::JSParser

  def load_page
    new_session
    visit "http://www.smashingmagazine.com"
    #let phantomjs take its time
    sleep 5
    puts "html=#{html}"  
  end
end

そして、最後に load_page を呼び出します

Loader.new.load_page

ポルターガイストからのデバッグ応答は次のとおりです。

poltergeist [1364758785355] state default -> loading
{"response"=>true}
{"name"=>"visit", "args"=>["http://www.smashingmagazine.com"]}
poltergeist [1364758794574] state loading -> default
{"response"=>{"status"=>"success"}}
{"name"=>"body", "args"=>[]}
{"response"=>"<html><head></head><body></body></html>"}

ご覧のとおり、応答は、html、head、および body タグのみが含まれ、body タグには何も含まれていない単なる空のドキュメントです。

私は何を間違っていますか?ネットワーク トラフィックを観察すると、ホスト (この場合は smashingmagazine.com) から完全な応答が返ってきます。応答が戻ってきた後、何が起こっているのかわかりません。時にはphantomjsもクラッシュすることもあれば、空の本体で通過することもあります。これは、phantomjs がクラッシュしたときに STDERR に出力される最後の行です。

PhantomJS client died while processing {"name":"visit","args":["http://www.smashingmagazine.com"]}
4

3 に答える 3

1

この Web サイトにアクセスすると、PhantomJS のバグのように聞こえます。(Poltergeist や Capybara ではなく) PhantomJSのみを使用して Web サイトを読み込んで、それが機能するかどうかを確認することをお勧めします。問題がある場合は、PhantomJS に対してバグを報告してください。

ここで PhantomJS について読むことができます: https://github.com/ariya/phantomjs/wiki/Quick-Start

于 2013-04-02T11:53:31.647 に答える