Poltergeist并使用onResourceReceived函数

时间:2015-04-17 09:20:32

标签: ruby-on-rails xmlhttprequest capybara phantomjs poltergeist

在我的项目中,我必须抓一些页面。我为此使用了Capybara和phantomjs。我有一个问题,其中一些页面发送异步(XHR)请求,我需要阻止它们。

我找到了这种情况的解决方案。 Phantomjs可以处理请求并中止它 - https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#webpage-onResourceReceived

我写了js脚本来记录和中止请求:

page.onResourceRequested = function(request, net) {
  console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
  net.abort();
};

并将其添加到init驱动程序(https://github.com/teampoltergeist/poltergeist#customization

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app,
    :phantomjs_options => ['--debug=no',
                           '--load-images=no',
                           '--ignore-ssl-errors=yes',
                           '--ssl-protocol=TLSv1'],
    extensions: [File.expand_path("../lib/phantomjs/abort_async.js", __FILE__)],
    :debug => false,
    js_errors: false)
end

但它不起作用...... 我认为问题在于js变量page,因为这个变量没有定义

2 个答案:

答案 0 :(得分:0)

扩展程序选项只是在浏览器中预加载一些javascript文件!

要加载一些js首选项,请像这样重写您的查询:

Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app,
    :phantomjs_options => [File.expand_path("../lib/phantomjs/abort_async.js", __FILE__),
                        '--debug=no',
                        '--load-images=no',
                        '--ignore-ssl-errors=yes',
                        '--ssl-protocol=TLSv1'],
    extensions: [],
    :debug => false,
    js_errors: false)
end

答案 1 :(得分:0)

poltergeist现在支持 url黑名单白名单,与capybara-webkit相同。 (https://github.com/teampoltergeist/poltergeist#url-blacklisting

page.driver.browser.url_blacklist = ['http://www.example.com']

您可以将异步请求的服务器URL列入黑名单。 spec file可能有助于理解这些功能。