[英]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
選項似乎沒有給我任何信息
你有幾個問題
poltergeist logger選項定義為'(對象響應放置) - 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協議而導致連接被拒絕 - 修復它會將所需的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.