我遇到了Capybara::Poltergeist::Driver
当我使用poltergeist访问以下网址时,我遇到了一个问题,即看似不存在的资产需要永远加载并最终引发错误:https://www.feinstein.senate.gov/public/index.cfm/e-mail-me
$ brew install phantomjs
$ gem install capybara -v 2.17.0
$ gem install poltergeist -v 1.7.0
$ gem install selenium-webdriver -v 2.53.4
然后在irb:
require 'capybara/poltergeist'
module Drivers
class Poltergeist < Capybara::Poltergeist::Driver
def needs_server?
false
end
end
end
Capybara.register_driver :poltergeist_errorless do |app|
options = ['--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=any', '--disk-cache=true', '--max-disk-cache-size=500000']
Drivers::Poltergeist.new(app, js_errors: false, phantomjs_options: options)
end
session = Capybara::Session.new(:poltergeist_errorless)
session.visit('https://www.feinstein.senate.gov/public/index.cfm/e-mail-me')
10-20秒后,请求失败,我收到Capybara::Poltergeist::StatusFailError
异常,并显示以下消息:
要求“https://www.feinstein.senate.gov/public/index.cfm/e-mail-me”无法访问服务器,检查DNS和/或服务器状态 - 超时后仍有等待的https://sdc1.senate.gov/NEED_VALUE/wtid.js
但如果我再打电话:
session.save_screenshot('/tmp/sc.png', full: true)
输出的截图显示页面的其余部分加载得很好。如果这是任何其他浏览器,它将继续愉快地运行而不用担心永远需要加载的资产。
是否有配置phantomjs不等待此资产并且不提出此异常?
答案 0 :(得分:1)
最简单的处理方法是使用Poltergeists黑名单来阻止网址 - https://github.com/teampoltergeist/poltergeist#customization - 和/或 - https://github.com/teampoltergeist/poltergeist#url-blacklisting--whitelisting
如果您的情况更加动态,您可以解除该异常,解析URL,将其添加到黑名单,然后重试访问。
此外,无需覆盖needs_server?
。如果您没有将第二个参数(要运行的应用)传递给Session#new
(您没有这样做),则needs_server?
无关紧要。
答案 1 :(得分:-1)
我会玩会话超时参数:
session = Capybara::Session.new(:poltergeist_errorless, :timeout=>ASSET_LOAD_TIME)