我使用zombie.js测试过程中加载从本地Express服务器的页面。 不幸的是,其中调出谷歌分析脚本元素。 我想,如果可以阻止这种外部脚本(正常),而不会阻止其他(本地)的脚本加载。
我知道{ runScripts : false }
可以通过调用browser.visit()
然而,拒绝加载网页上的任何和所有的脚本,而不仅仅是那些生活在其他主机上。 这可能吗?
我使用zombie.js测试过程中加载从本地Express服务器的页面。 不幸的是,其中调出谷歌分析脚本元素。 我想,如果可以阻止这种外部脚本(正常),而不会阻止其他(本地)的脚本加载。
我知道{ runScripts : false }
可以通过调用browser.visit()
然而,拒绝加载网页上的任何和所有的脚本,而不仅仅是那些生活在其他主机上。 这可能吗?
您应该使用的资源对象。
您可以设置一定的要求给予具体答复,如果你不希望实际经历的要求。 你会做以下,使谷歌分析返回一个空文件:
browser.resources.mock('http://google.com/url/to/analytics.js',{});
请注意,您必须提供要嘲笑确切的网址,也没有办法嘲笑的部分URL,如域名。
由于僵尸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()
也许这样的事情会为你工作? 遍历所有的资源和“中止”应该被忽略的人。
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 });
}
});