首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地调试与Capybara/Poltergeist?

如何正确地调试与Capybara/Poltergeist?
EN

Stack Overflow用户
提问于 2016-03-07 12:49:18
回答 3查看 4.4K关注 0票数 4

我正在玩的水豚/恶作剧完美的二重奏,但我有困难,正确的调试。我正在测试一个简单的脚本:

代码语言:javascript
复制
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'

我期望脚本正常地抓取页面并保存它,但是页面是空的,并且返回如下:

代码语言:javascript
复制
`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"

即使我不知道为什么这个地址不回复水豚(任何提示都会很感激:),我也不明白为什么配置中使用的:debug选项似乎没有给我任何信息

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-07 21:00:18

你有几个问题

  1. poltergeist记录器选项被定义为‘(响应于puts的对象)--ruby2.3.0标准库logger对象不响应puts,因此它无效。
  2. 您的示例没有Capybara.current_driver = :poltergeist,所以我不确定它是否实际使用了您在那里配置的驱动程序,还是前面定义的驱动程序(如果是的话,我希望在Logger对象上出现错误)。
  3. debug: true将为poltergeist添加调试到日志中,但也有来自幻影is的调试信息。,这是通过将phantomjs_options: ['--debug=true'], phantomjs_logger: <an IO object - again not a Logger object>传递给驱动程序而生成的。
  4. 您实际上碰到的错误是由于无法协商ssl协议而拒绝连接--为了修复它,将所需的ssl协议添加为幻影as选项- `phantomjs_options:-ssl- protocol =TLSv1.2‘
票数 9
EN

Stack Overflow用户

发布于 2016-03-08 18:38:33

我会在一个独立的红宝石脚本中使用如下内容,调整driver_options以适应您的口味。

代码语言:javascript
复制
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'
票数 3
EN

Stack Overflow用户

发布于 2016-03-07 13:23:37

你试过吗

代码语言:javascript
复制
Capybara.register_driver :poltergeist_debug do |app|
 Capybara::Poltergeist::Driver.new(app, :inspector => true)
end

Capybara.javascript_driver = :poltergeist_debug

如图所示,这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35844186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档