如何正确调试Capybara / Poltergeist?

时间:2016-03-07 12:49:18

标签: ruby 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选项似乎没有给我没有信息

3 个答案:

答案 0 :(得分:7)

你有几个问题

  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. 生成的
  5. 您实际遇到的错误是由于无法协商ssl协议而被拒绝连接 - 修复它将所需的ssl协议添加为phantomjs选项 - “phantomjs_options:[ - --ssl -protocol = TLSv1.2' 工作]

答案 1 :(得分:3)

我会在独立的ruby脚本中使用以下内容,根据您的喜好调整chan

driver_options

答案 2 :(得分:2)

你试过吗

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

Capybara.javascript_driver = :poltergeist_debug

如图所示here