我正在玩 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 选项似乎没有给我任何信息

最佳答案

你有几个问题

  • poltergeist logger 选项定义为“(对象响应 puts)- ruby​​ 2.3.0 标准库 Logger 对象不响应 puts,因此它无效。
  • 你的例子没有 Capybara.current_driver = :poltergeist 所以我不确定它是否真的使用了你在那里配置的驱动程序或以前定义的驱动程序(如果是的话,我预计 Logger 对象上会出现错误)
  • debug: true将在日志中添加针对poltergeist的调试,但是也有来自phantomjs的调试信息。这是通过将 phantomjs_options: ['--debug=true'], phantomjs_logger: <an IO object - again not a Logger object> 传递给驱动程序
  • 生成的
  • 您实际遇到的错误是由于无法协商 ssl 协议(protocol)而导致连接被拒绝 - 要修复它,请将所需的 ssl 协议(protocol)添加为 phantomjs 选项 - `phantomjs_options: ['--ssl-protocol=TLSv1. 2']
  • 关于ruby - 如何使用Capybara/Poltergeist正确调试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35844186/

    10-12 22:24