2013-03-31 56 views
3

我從幻影獲取空白文檔。我正嘗試使用Capybara和Poltergeist爲水豚設置phantomjs驅動程序。水豚,poltergeist和phantomjs和在身體中給出一個空的響應

我按如下方式創建了一個模塊,並將其包含在使用需要連接的文件中。

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

調試響應正如你所看到的那樣e響應只是一個空白的文檔,只有html,head和body標籤,但沒有任何標籤。

我在做什麼錯?觀察網絡流量,我得到了主機的全面響應(在這種情況下是smashingmagazine.com)。它的迴應後,我不知道發生了什麼。有時幻影也會崩潰,在其他場合,它會通過空的身體。這裏是STDERR上打印時phantomjs崩潰

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

回答

1

訪問這個網站時,這聽起來像在PhantomJS一個bug的最後一行。我建議試圖加載網站使用只有 PhantomJS(而不是Poltergeist或水豚),看看是否有效。如果它也有問題,請向PhantomJS報告錯誤。

你可以在這裏讀到PhantomJS:https://github.com/ariya/phantomjs/wiki/Quick-Start

0

獲取HTML用這個代替 puts "html=#{page.html}"

5

我也有過類似的問題。但下面的選項設置:phantomjs_options,幫助我解決了這個問題。

Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, 
             :phantomjs_options => ['--debug=no', '--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1'], :debug => false) 
    end 
+0

感謝您的支持。 「--ssl-protocol = TLSv1」這個論點爲我解決了一個類似的空回答問題。 – Kirkman14

+2

經過幾個小時來調試一個很少使用的功能,依賴於casper.js和phantomjs,我偶然發現了這個答案。幾個月前,我們已經升級了我們反向代理的安全性.... facepalm。當這種情況發生時,我無法相信幻影只會默默地失敗。謝謝!!! – AlexMA

+0

過去8個小時我一直拉我的頭髮,非常感謝這些節省了我一天的選擇。歡呼! – Sephy

相關問題