【问题标题】:Ruby: Phantom.js blocked on specific site?Ruby:Phantom.js 在特定站点上被阻止?
【发布时间】:2014-10-31 15:04:39
【问题描述】:

我正在使用 capybara poltergeist 来自动化 tumblr.com 上的一个小脚本

我的脚本在我的 chrome 驱动程序上运行良好。我的 poltergeist 驱动程序可以很好地加载所有其他网站,但由于某种原因,当我尝试加载 tumblr 时会抛出 Capybara::Poltergeist::StatusFailError

复制步骤:

$ brew install phantomjs
$ gem install capybara
$ gem install poltergeist
$ gem install selenium-webdriver
$ 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|
  Drivers::Poltergeist.new(app, js_errors: false, timeout: 10000, phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes'])
end

session = Capybara::Session.new(:poltergeist_errorless)
session.visit('https://google.com') # This works fine
session.visit('https://tumblr.com') # This does not work?

我试图设置我所有的标题来查看我的谷歌浏览器的请求,但这似乎也没有解决它。有人有什么建议吗?

【问题讨论】:

  • 难住了。很难调试 poltergeist,但无法弄清楚为什么访问 tumblr 会导致{'status' =&gt; 'fail' }。在硒中工作正常......
  • 感谢您的调查,非常感谢您抽出宝贵的时间。我不明白为什么这是一个很难解决的问题?

标签: ruby selenium capybara tumblr poltergeist


【解决方案1】:

该问题与 phantomjs SSL 握手失败有关。你可以拿我的gist 用phantomjs 运行,你会看到:

[cut]
= onResourceError()
  - unable to load url: "https://www.tumblr.com/"
  - error code: 6, description: SSL handshake failed
= onResourceReceived()
  id: 3, stage: "end", response: {"contentType":null,"headers":[],"id":3,"redirectURL":null,"stage":"end","status":null,"statusText":null,"time":"2014-09-16T12:06:05.547Z","url":"https://www.tumblr.com/"}
= onLoadFinished()
  status: fail
DONE WITH  fail WebPage(name = "WebPage")

检查一下解决方法是在幻像中使用--ssl-protocol=any,因此您的代码将变为:

Capybara.register_driver :poltergeist_errorless do |app|
  Drivers::Poltergeist.new(app, js_errors: false, timeout: 10000, phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=any'])
end

上班。

参考资料:

【讨论】:

  • 感谢 Enrico!
  • 我在笔记本电脑上仍然遇到这个问题,但在生产中。这是随机失败。
  • @Chamnap 你所说的“生产中”是什么意思?您是否使用 '--ignore-ssl-errors=yes' 和 '--ssl-protocol=any' 初始化了 Poltergeist?
  • 我的意思是这是随机故障。有时在我的笔记本电脑上工作,但不是在生产上,反之亦然。是的,我已经使用这些选项进行了初始化,并且还检查了ps aux | grep phantomjs。 poltergeist 也有问题,github.com/EFForg/phantom-of-the-capitol/issues/47
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
相关资源
最近更新 更多