使用 Poltergeist/PhantomJS/Capybara/Nokogiri 抓取网站有困难。在网站上受阻

Difficulties scraping site using Poltergeist/PhantomJS/Capybara/Nokogiri. Getting held up on website

我试图在 ruby 脚本中使用 poltergeist 和 copybara 访问一系列网站。我在特定网站上遇到奇怪的问题:http://www.slate.com/

脚本的基本元素如下:

require 'nokogiri'
require 'capybara/poltergeist'
slate = "http://www.slate.com"
OPTIONS = {:js_errors => false, :debug => true, :timeout => 120, :phantomjs_options => ['--ignore-ssl-errors=false', '--load-images=false']}
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, OPTIONS)
end

session = Capybara::Session.new(:poltergeist)

session.driver.headers = {"User-Agent" => USER_AGENT}

session.visit slate

我得到的响应很奇怪,与我以这种方式访问​​的其他网站不同。在 session.visit 它 returns [object Object] 之后,请求成功并返回我的 IRB 提示。但随后我会在大约 5 或 10 秒后自动进入我的提示 timeout timeout,然后 MySlateData data is empy

irb(main):016:0> session.visit slate
[object Object]
=> {"status"=>"success"}
irb(main):017:0> timeout timeout
MySlateData data is empty

有什么方法可以弄清楚为什么响应似乎以一种奇怪的方式保持我的会话?如果我 运行 OPTIONS 进行调试,我真的看不到更多有用的东西。

irb(main):014:0> session.visit slate
{"id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","name":"visit","args":["http://www.slate.com"]}
[object Object]
{"command_id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","response":{"status":"success"}}
=> {"status"=>"success"}
irb(main):015:0> timeout timeout
MySlateData data is empty

出于某种原因,我无法抓取生成的 HTML,因为它会干扰将 html 加载到 nokogiri。

Capybara 没有保留您的会话。 Poltergeist/PhantomJS 是 运行 "browser" 与您的代码异步 - 您在输出中看到的无关内容是您访问过的网站的控制台日志的输出。确保您使用的是最新版本的 poltergeist (1.9+) 和 phantomjs (2.1.1+) 可能会删除其中一些,因为它们会在页面中产生更少的错误