我和Capybara::Poltergeist::Driver有一些问题
当我使用poltergeist访问以下url时,我正在处理一个问题,似乎不存在的资产需要永远加载,最终会引发一个错误: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和/或服务器状态-已超时,以下资源仍在等待VALUE/wtid.js
但如果我当时打电话:
session.save_screenshot('/tmp/sc.png', full: true)输出的屏幕截图显示页面的其余部分加载得很好。如果这是其他浏览器的话,它将继续愉快地运行,而不用担心要花费很长时间才能加载的资产。
是否有配置幻影Is不等待此资产和不引发此异常?
发布于 2018-01-25 22:18:54
处理这一问题的最简单方法是使用诡计黑名单阻止url - https://github.com/teampoltergeist/poltergeist#customization -和/或- https://github.com/teampoltergeist/poltergeist#url-blacklisting--whitelisting。
如果您的情况更动态,您可以拯救异常,解析URL,将其添加到黑名单中,然后重试访问。
此外,没有必要覆盖needs_server?。如果您不将第二个参数(要运行的应用程序)传递给Session#new (您没有这样做),那么needs_server?就无关紧要了。
发布于 2018-01-25 21:15:16
我将在会话超时参数中四处游玩:
session = Capybara::Session.new(:poltergeist_errorless, :timeout=>ASSET_LOAD_TIME)https://stackoverflow.com/questions/48451598
复制相似问题