Capybara Poltergeist IOError: closed stream
Capybara Poltergeist IOError: closed stream
我正在使用 Capybara 进行网页抓取。我注意到一个问题,之后 Poltergeist 在占用系统资源的内存中徘徊。 Poltergeist Github 页面指出 Capybara (https://github.com/teampoltergeist/poltergeist) 存在内存泄漏问题,他们建议调用
session.driver.quit
这解决了我的内存问题,但是当我想稍后再次使用水豚时,我收到错误消息:
IOError: closed stream
我相信只需刷新 Capybara 会话即可解决此问题,但找不到 public 方法让我重新启动一个全新的会话。
1) 有什么方法可以解决我的问题吗?
2) 重置会话是重新打开流的最佳方式吗?
我认为您的客户端内存因内存泄漏而超载,因此重新启动浏览器可以解决问题。您可以通过session.driver.browser.client
查看客户信息。您可以按 session.driver.browser.restart
重新启动浏览器,然后它会打开一个没有 url 的浏览器。如果您检查 session.driver.browser.client
,您可以看到客户端信息已重置。
效果最好的解决方案是像这样启动一个新的水豚会话:
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
我正在使用 Capybara 进行网页抓取。我注意到一个问题,之后 Poltergeist 在占用系统资源的内存中徘徊。 Poltergeist Github 页面指出 Capybara (https://github.com/teampoltergeist/poltergeist) 存在内存泄漏问题,他们建议调用
session.driver.quit
这解决了我的内存问题,但是当我想稍后再次使用水豚时,我收到错误消息:
IOError: closed stream
我相信只需刷新 Capybara 会话即可解决此问题,但找不到 public 方法让我重新启动一个全新的会话。
1) 有什么方法可以解决我的问题吗?
2) 重置会话是重新打开流的最佳方式吗?
我认为您的客户端内存因内存泄漏而超载,因此重新启动浏览器可以解决问题。您可以通过session.driver.browser.client
查看客户信息。您可以按 session.driver.browser.restart
重新启动浏览器,然后它会打开一个没有 url 的浏览器。如果您检查 session.driver.browser.client
,您可以看到客户端信息已重置。
效果最好的解决方案是像这样启动一个新的水豚会话:
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