我正在使用Capybara进行网页抓取。我注意到一个问题,后来Poltergeist在记忆中吃掉了系统资源。 Poltergeist Github页面指出Capybara(https://github.com/teampoltergeist/poltergeist)存在内存泄漏问题,他们建议调用
session.driver.quit
这为我修复了内存问题,但是当我想稍后再次使用Capybara时,我会收到错误消息:
IOError: closed stream
我相信只是刷新Capybara会话就可以解决这个问题,但无法找到一个允许我重新开始全新会话的公共方法。
1)有没有一种方法可以解决我的问题?
2)重置会话是重新打开流的最佳方式吗?
答案 0 :(得分:4)
最有效的解决方案是启动这样一个新的Capybara会议:
session = Capybara::Session.new(:poltergeist, Rails.application)
session.visit(...)
session.driver.quit
对于我的程序,我将它封装在WebScraper模块中,如下所示:
module WebScraper
attr_accessor :session
delegate :visit, :save_screenshot, to: :session
def start_session
@session ||= Capybara::Session.new(:poltergeist, Rails.application)
end
def end_session
@session.driver.quit
@session = nil
end
end
答案 1 :(得分:1)
我认为您的客户端内存因内存泄漏而过载,因此重新启动浏览器可以解决问题。您可以按session.driver.browser.client
查看客户信息。您可以通过session.driver.browser.restart
重新启动浏览器,然后打开一个没有网址的浏览器。如果您检查session.driver.browser.client
,则可以看到客户端信息已重置。