5

我在测试期间使用zombie.js 从本地快速服务器加载页面。不幸的是,有一个脚本元素调用了 Google Analytics。如果可能的话,我想(优雅地)阻止这个外部脚本,而不阻止其他(本地)脚本加载。

我知道{ runScripts : false }调用browser.visit(). 但是,它拒绝加载页面上的任何和所有脚本,而不仅仅是那些生活在其他主机上的脚本。这可能吗?

4

3 回答 3

8

僵尸 3.1开始,该browser.resources.mock方法就消失了。另一种方法是使用nock库:

var nock = require('nock')

nock('http://www.google-analytics.com')
  .get('/analytics.js')
  .times(Math.Infinity)
  .reply(200, '{}')

var Browser = require('zombie')
var browser = new Browser()
于 2015-06-03T17:42:17.697 回答
7

您应该使用资源对象。

如果您不希望请求实际通过,您可以设置某些请求以给出特定响应。您将执行以下操作以使 google 分析返回一个空文档:

browser.resources.mock('http://google.com/url/to/analytics.js',{});

请注意,您必须提供要模拟的确切 URL,无法模拟部分 URL,例如域名。

于 2013-04-30T18:12:42.290 回答
1

也许这样的东西对你有用?它循环遍历所有资源并“中止”应该忽略的资源。

const Fetch = require('zombie/lib/fetch');

const ignoredResources = [
  'google-analytics.com'
];

browser.pipeline.addHandler((browser, request) => {
  let doAbort = false;

  ignoredResources.forEach(domain => {
    if (request.url.includes(domain)) {
      doAbort = true;
    }
  });

  if (doAbort) {
    return new Fetch.Response('', { status: 200 });
  }
});
于 2017-08-16T05:00:32.220 回答