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