在请求永不结束资产时,防止phantomjs提升Capybara :: Poltergeist :: StatusFailError

时间:2018-01-25 20:45:21

标签: ruby selenium phantomjs capybara poltergeist

我遇到了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不等待此资产并且不提出此异常?

2 个答案:

答案 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)