在我的项目中,我必须抓一些页面。我为此使用了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
,因为这个变量没有定义
答案 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可能有助于理解这些功能。