Capybara, Poltergeist und Phantomjs und eine leere Antwort im Körper

Ich bekomme ein leeres Dokument von Phantomjs zurück. Ich versuche, Capybara und Poltergeist zum Einrichten des Phantom-Treibers für Capybara zu verwenden.

Ich habe ein Modul wie folgt erstellt und es in die Datei eingefügt, die für die Verbindung benötigt wird.

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

Laden Sie dann die Seite wie folgt:

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

Dann endlich die load_page aufrufen

Loader.new.load_page

Hier ist die Debug-Antwort von Poltergeist

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>"}

Wie Sie sehen, ist die Antwort nur ein leeres Dokument mit nur den Tags html, head und body, aber nichts im Tag body.

Was mache ich falsch? Wenn ich den Netzwerkverkehr beobachte, erhalte ich die vollständige Antwort vom Host (in diesem Fall smashingmagazine.com). Nachdem die Antwort zurückkommt, weiß ich nicht, was passiert. Manchmal stürzt auch ein Phantom ab und manchmal geht es mit dem leeren Körper durch. Hier ist die letzte Zeile, die auf STDERR gedruckt wird, wenn ein Phantom abstürzt

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage