Capibara, Poltergeist y Phantomjs y dando una respuesta vacía en el cuerpo
Estoy recibiendo un documento vacío de phantomjs. Estoy tratando de usar Capybara y Poltergeist para configurar el controlador phantomjs para Capybara.
Creé un módulo de la siguiente manera y lo incluí en el archivo que usa las necesidades para conectarse.
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
Luego, cargando la página de la siguiente manera:
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
Entonces, finalmente, llamando a la página de carga.
Loader.new.load_page
Aquí está la respuesta de depuración de 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>"}
Como puede ver, la respuesta es solo un documento en blanco con solo las etiquetas html, head y body, pero nada en la etiqueta body.
¿Qué mal estoy haciendo? Al observar el tráfico de la red, recibo la respuesta completa del host (smashingmagazine.com en este caso). Es después de que vuelve la respuesta que no sé lo que está sucediendo. A veces los phantomjs también se estrellan y en otras ocasiones, pasa con el cuerpo vacío. Esta es la última línea que se imprime en STDERR cuando se bloquea phantomjs
PhantomJS client died while processing {"name":"visit","args":["http://www.smashingmagazine.com"]}