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