簡體   English   中英

如何正確調試Capybara / Poltergeist?

[英]How to properly debug with Capybara/Poltergeist?

我正在玩capybara / poltergeist完美二人組,但我無法正常調試。 我正在測試一個簡單的腳本:

logger = Logger.new "./log/who-scored-com.log"
Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, js_errors: false,
                                         debug: true,
                                         logger: logger)
end
browser = Capybara.current_session
browser.visit 'https://www.whoscored.com/LiveScores'
browser.save_page 'page.html'

我希望腳本正常抓取頁面並保存它,但頁面為空並返回:

`Capybara::Poltergeist::StatusFailError: Capybara::Poltergeist::StatusFailError
    from /home/vagrant/local/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/poltergeist-1.9.0/lib/capybara/poltergeist/browser.rb:351:in `command'
    from /home/vagrant/local/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/poltergeist-1.9.0/lib/capybara/poltergeist/browser.rb:34:in `visit'`

現在,這不會給我這個錯誤。 我抓住了異常並打印出來,它給了我:

"Request to 'https://www.whoscored.com/LiveScores' failed to reach server, check DNS and/or server status"

即使我不知道為什么地址不響應capybara(任何提示都會欣賞:))我不明白為什么:debug配置中使用的:debug選項似乎沒有給我任何信息

你有幾個問題

  1. poltergeist logger選項定義為'(對象響應放置) - ruby​​ 2.3.0標准庫Logger對象不響應puts,因此它無效。

  2. 你的例子沒有Capybara.current_driver = :poltergeist所以我不確定它是否實際上是使用你在那里配置的驅動程序或者之前定義的驅動程序(如果它在Logger對象上,我會預料到它會出錯)為)

  3. debug: true會將poltergeist的調試添加到日志中,但是還有來自phantomjs的調試信息。 這是通過將phantomjs_options: ['--debug=true'], phantomjs_logger: <an IO object - again not a Logger object>傳遞給驅動程序生成的

  4. 您實際遇到的錯誤是由於無法協商ssl協議而導致連接被拒絕 - 修復它會將所需的ssl協議添加為phantomjs選項 - “phantomjs_options:[ - --ssl-protocol = TLSv1.2 “]

我會在獨立的ruby腳本中使用類似下面的內容,調整driver_options以滿足您的口味。

require 'capybara'
require 'capybara/poltergeist'

class NilLogger
  def puts * ; end
end

def setup_session
  driver_options = { js_errors: false,
                     logger: NilLogger.new,
                     phantomjs_logger: STDOUT,
                     phantomjs_options: ['--debug=true'],
                     debug: false  }
  Capybara.configure do |conf|
    conf.run_server = false
    conf.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new app, driver_options
    end
    conf.current_driver = :poltergeist
  end
  Capybara.current_session
end

browser = setup_session()
browser.visit 'https://www.whoscored.com/LiveScores'
browser.save_page 'page.html'

你有沒有嘗試過

Capybara.register_driver :poltergeist_debug do |app|
 Capybara::Poltergeist::Driver.new(app, :inspector => true)
end

Capybara.javascript_driver = :poltergeist_debug

如圖所示這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM