问题 Ruby:Phantom.js在特定网站上被屏蔽了?


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

我的脚本与我的Chrome驱动程序一起工作正常..我的恶作剧驱动程序加载所有其他网站就好了,但由于某种原因抛出一个 Capybara::Poltergeist::StatusFailError 当我尝试加载tumblr。

复制步骤:

$ 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?

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


3906
2017-09-07 02:28


起源

难住了。很难调试poltergeist,但无法弄清楚为什么访问tumblr导致了 {'status' => 'fail' }。在硒中工作正常...... - Anthony
感谢您的关注,我非常感谢您的时间。我无法理解为什么这是一个难以解决的难题? - BananaNeil


答案:


该问题与phantomjs SSL握手失败有关。你可以拿我的 要旨 和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

上班。

参考文献:


15
2017-09-16 12:12



谢谢你这个恩里科! - etusm
我仍然在笔记本电脑上遇到这个问题,但是在生产上。这是一次随机的失败。 - Chamnap
@Chamnap你对“生产”的意思是什么?你用'--ignore-ssl-errors = yes'和'--ssl-protocol = any'初始化了Poltergeist吗? - Enrico Carlesso
我的意思是随机失败。有时在我的笔记本电脑上工作但不在生产上,反之亦然。是的,我已经初始化了这些选项,并检查 ps aux | grep phantomjs。关于吵闹的人也有问题, github.com/EFForg/phantom-of-the-capitol/issues/47。 - Chamnap