casperJS page.resource.request 和 page.resource.response 回调调用在打开多个 URL 时递增
casperJS page.resource.request and page.resource.response callback calls increment when opening multiple URL
我遇到了一个与以下方法有关的小问题:
- 我想用一个循环
遍历给定的 URL 数组
- 我在这里这样做是因为我想测量URL列表
中列出的每个页面的加载时间
这里是这个例子的代码():
var urls = [
'meine-url.de/home.html',
'meine-url.de/impressum.html',
'meine-url.de/rechtliche_hinweise.html',
'meine-url.de/datenschutz.html',
'meine-url.de/emissions_verbrauchswerte.html',
'meine-url.de/probefahrtanfrage.html',
'meine-url.de/angebotsanfrage.html',
'meine-url.de/servicekontaktanfrage.html',
'meine-url.de/serviceterminanfrage.html',
'meine-url.de/autohaus_aktuell.html',
'meine-url.de/aktuelles_von_auto.html',
'meine-url.de/unser_autohaus.html',
'meine-url.de/unser_team.html',
'meine-url.de/anfahrt.html',
'meine-url.de/standorte.html',
'meine-url.de/oeffnungszeiten.html',
'meine-url.de/checks_inspektion.html',
'meine-url.de/auto_service_check.html',
'meine-url.de/inspektion.html',
'meine-url.de/hauptuntersuchung.html',
'meine-url.de/reparaturen.html',
'meine-url.de/garantie_mobilitaet.html',
'meine-url.de/herstellergarantie.html',
'meine-url.de/mobilservice.html',
'meine-url.de/flex_garantie.html',
'meine-url.de/verlaengerung_anschlussgarantie.html'
];
var s,e;
casper.test.begin('TEST CONTROLLER', function(test) {
casper.start();
/* Run tests for all given URLs */
casper.each(urls, function(self, url, i) {
/* Open the next given URL form the array */
casper.thenOpen(url, function() {
/* On every request we take a new start time */
casper.on('page.resource.requested', function(requestData, request) {
console.log("REQUESTED:",requestData.url);
s = new Date().getTime();
});
/* And when the response comes in we calculate the difference */
casper.on('page.resource.received', function(response) {
console.log("RESPONSE DATA GOTTEN: ",response.url);
e = new Date().getTime();
casper.echo("URL: "+url+" - "+"Time between HTTP request and HTTP response : "+ (e-s) + "ms", "INFO");
});
});
});
casper.run(function() {
test.done();
});
});
总的来说,这种方法是可行的,但有一个小问题我不明白,也没有意义。
在这里查看输出结果:
# TEST CONTROLLER
PASS URL: meine-url.de/home.html - Time : 244ms
PASS URL: meine-url.de/home.html - Time : 153ms
PASS URL: meine-url.de/impressum.html - Time : 154ms
PASS URL: meine-url.de/home.html - Time : 123ms
PASS URL: meine-url.de/impressum.html - Time : 124ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 125ms
PASS URL: meine-url.de/home.html - Time : 153ms
PASS URL: meine-url.de/impressum.html - Time : 154ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 154ms
PASS URL: meine-url.de/datenschutz.html - Time : 154ms
PASS URL: meine-url.de/home.html - Time : 2327ms
PASS URL: meine-url.de/impressum.html - Time : 2328ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2328ms
PASS URL: meine-url.de/datenschutz.html - Time : 2328ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2328ms
PASS URL: meine-url.de/home.html - Time : 2403ms
PASS URL: meine-url.de/impressum.html - Time : 2404ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2405ms
PASS URL: meine-url.de/datenschutz.html - Time : 2405ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2405ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2405ms
PASS URL: meine-url.de/home.html - Time : 2320ms
PASS URL: meine-url.de/impressum.html - Time : 2321ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2321ms
PASS URL: meine-url.de/datenschutz.html - Time : 2321ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2321ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2321ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 2321ms
PASS URL: meine-url.de/home.html - Time : 2363ms
PASS URL: meine-url.de/impressum.html - Time : 2364ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2365ms
PASS URL: meine-url.de/datenschutz.html - Time : 2365ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2365ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2365ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 2365ms
PASS URL: meine-url.de/servicekontaktanfrage.html - Time : 2365ms
PASS URL: meine-url.de/home.html - Time : 3025ms
PASS URL: meine-url.de/impressum.html - Time : 3026ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 3026ms
PASS URL: meine-url.de/datenschutz.html - Time : 3026ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 3026ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 3027ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 3027ms
PASS URL: meine-url.de/servicekontaktanfrage.html - Time : 3027ms
PASS URL: meine-url.de/serviceterminanfrage.html - Time : 3027ms
所以你可以看到它建立了一个堆栈,回调方法,casper.on('page.resource.requested'
和 casper.on('page.resource.received'
都从以前调用过的所有页面得到了回调。正如您看到的那样,每一步都会增加。
根据最后给定的测量时间,代码工作正确 URL 但它在这里不合适。
我只想要一个 URL 的回调,而不是这个,我能在这里做什么,我假设它必须对 page
对象做一些事情。超出此上下文的内容:
https://github.com/n1k0/casperjs/pull/826
但这不起作用,当我重新创建页面上下文时,我收到如下错误消息:
FAIL Error: cannot access member `customHeaders' of deleted QObject
或
uncaughtError: TypeError: 'undefined' is not a function (evaluating 'casper.newPage()')
他好像找不到newPage函数。
casper.on()
将始终向列表添加事件处理程序。它不会取代它们。由于您在 每次迭代 上添加事件,您将从之前的迭代中获得重复的输出。
此外,then
回调是在加载 URL 之后调用的,因此您在该回调中注册的事件处理程序不会为当前 URL 调用没有了。
casper.start();
/* On every request we take a new start time */
casper.on('page.resource.requested', function(requestData, request) {
console.log("REQUESTED:",requestData.url);
s = new Date().getTime();
});
/* And when the response comes in we calculate the difference */
casper.on('page.resource.received', function(response) {
console.log("RESPONSE DATA GOTTEN: ",response.url);
var e = new Date().getTime();
casper.echo("URL: "+url+" - "+"Time between HTTP request and HTTP response : "+ (e-s) + "ms", "INFO");
});
/* Run tests for all given URLs */
casper.each(urls, function(self, url, i) {
/* Open the next given URL form the array */
casper.thenOpen(url);
});
casper.run(function() {
test.done();
});
如果你想让它更健壮,那么你需要检测页面是否完全加载。为此,您可能需要注册 "resource.error"
和 casper.page.onResourceTimeout
(Example)。
我遇到了一个与以下方法有关的小问题:
- 我想用一个循环 遍历给定的 URL 数组
- 我在这里这样做是因为我想测量URL列表 中列出的每个页面的加载时间
这里是这个例子的代码():
var urls = [
'meine-url.de/home.html',
'meine-url.de/impressum.html',
'meine-url.de/rechtliche_hinweise.html',
'meine-url.de/datenschutz.html',
'meine-url.de/emissions_verbrauchswerte.html',
'meine-url.de/probefahrtanfrage.html',
'meine-url.de/angebotsanfrage.html',
'meine-url.de/servicekontaktanfrage.html',
'meine-url.de/serviceterminanfrage.html',
'meine-url.de/autohaus_aktuell.html',
'meine-url.de/aktuelles_von_auto.html',
'meine-url.de/unser_autohaus.html',
'meine-url.de/unser_team.html',
'meine-url.de/anfahrt.html',
'meine-url.de/standorte.html',
'meine-url.de/oeffnungszeiten.html',
'meine-url.de/checks_inspektion.html',
'meine-url.de/auto_service_check.html',
'meine-url.de/inspektion.html',
'meine-url.de/hauptuntersuchung.html',
'meine-url.de/reparaturen.html',
'meine-url.de/garantie_mobilitaet.html',
'meine-url.de/herstellergarantie.html',
'meine-url.de/mobilservice.html',
'meine-url.de/flex_garantie.html',
'meine-url.de/verlaengerung_anschlussgarantie.html'
];
var s,e;
casper.test.begin('TEST CONTROLLER', function(test) {
casper.start();
/* Run tests for all given URLs */
casper.each(urls, function(self, url, i) {
/* Open the next given URL form the array */
casper.thenOpen(url, function() {
/* On every request we take a new start time */
casper.on('page.resource.requested', function(requestData, request) {
console.log("REQUESTED:",requestData.url);
s = new Date().getTime();
});
/* And when the response comes in we calculate the difference */
casper.on('page.resource.received', function(response) {
console.log("RESPONSE DATA GOTTEN: ",response.url);
e = new Date().getTime();
casper.echo("URL: "+url+" - "+"Time between HTTP request and HTTP response : "+ (e-s) + "ms", "INFO");
});
});
});
casper.run(function() {
test.done();
});
});
总的来说,这种方法是可行的,但有一个小问题我不明白,也没有意义。
在这里查看输出结果:
# TEST CONTROLLER
PASS URL: meine-url.de/home.html - Time : 244ms
PASS URL: meine-url.de/home.html - Time : 153ms
PASS URL: meine-url.de/impressum.html - Time : 154ms
PASS URL: meine-url.de/home.html - Time : 123ms
PASS URL: meine-url.de/impressum.html - Time : 124ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 125ms
PASS URL: meine-url.de/home.html - Time : 153ms
PASS URL: meine-url.de/impressum.html - Time : 154ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 154ms
PASS URL: meine-url.de/datenschutz.html - Time : 154ms
PASS URL: meine-url.de/home.html - Time : 2327ms
PASS URL: meine-url.de/impressum.html - Time : 2328ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2328ms
PASS URL: meine-url.de/datenschutz.html - Time : 2328ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2328ms
PASS URL: meine-url.de/home.html - Time : 2403ms
PASS URL: meine-url.de/impressum.html - Time : 2404ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2405ms
PASS URL: meine-url.de/datenschutz.html - Time : 2405ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2405ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2405ms
PASS URL: meine-url.de/home.html - Time : 2320ms
PASS URL: meine-url.de/impressum.html - Time : 2321ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2321ms
PASS URL: meine-url.de/datenschutz.html - Time : 2321ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2321ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2321ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 2321ms
PASS URL: meine-url.de/home.html - Time : 2363ms
PASS URL: meine-url.de/impressum.html - Time : 2364ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 2365ms
PASS URL: meine-url.de/datenschutz.html - Time : 2365ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 2365ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 2365ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 2365ms
PASS URL: meine-url.de/servicekontaktanfrage.html - Time : 2365ms
PASS URL: meine-url.de/home.html - Time : 3025ms
PASS URL: meine-url.de/impressum.html - Time : 3026ms
PASS URL: meine-url.de/rechtliche_hinweise.html - Time : 3026ms
PASS URL: meine-url.de/datenschutz.html - Time : 3026ms
PASS URL: meine-url.de/emissions_verbrauchswerte.html - Time : 3026ms
PASS URL: meine-url.de/probefahrtanfrage.html - Time : 3027ms
PASS URL: meine-url.de/angebotsanfrage.html - Time : 3027ms
PASS URL: meine-url.de/servicekontaktanfrage.html - Time : 3027ms
PASS URL: meine-url.de/serviceterminanfrage.html - Time : 3027ms
所以你可以看到它建立了一个堆栈,回调方法,casper.on('page.resource.requested'
和 casper.on('page.resource.received'
都从以前调用过的所有页面得到了回调。正如您看到的那样,每一步都会增加。
根据最后给定的测量时间,代码工作正确 URL 但它在这里不合适。
我只想要一个 URL 的回调,而不是这个,我能在这里做什么,我假设它必须对 page
对象做一些事情。超出此上下文的内容:
https://github.com/n1k0/casperjs/pull/826
但这不起作用,当我重新创建页面上下文时,我收到如下错误消息:
FAIL Error: cannot access member `customHeaders' of deleted QObject
或
uncaughtError: TypeError: 'undefined' is not a function (evaluating 'casper.newPage()')
他好像找不到newPage函数。
casper.on()
将始终向列表添加事件处理程序。它不会取代它们。由于您在 每次迭代 上添加事件,您将从之前的迭代中获得重复的输出。
此外,then
回调是在加载 URL 之后调用的,因此您在该回调中注册的事件处理程序不会为当前 URL 调用没有了。
casper.start();
/* On every request we take a new start time */
casper.on('page.resource.requested', function(requestData, request) {
console.log("REQUESTED:",requestData.url);
s = new Date().getTime();
});
/* And when the response comes in we calculate the difference */
casper.on('page.resource.received', function(response) {
console.log("RESPONSE DATA GOTTEN: ",response.url);
var e = new Date().getTime();
casper.echo("URL: "+url+" - "+"Time between HTTP request and HTTP response : "+ (e-s) + "ms", "INFO");
});
/* Run tests for all given URLs */
casper.each(urls, function(self, url, i) {
/* Open the next given URL form the array */
casper.thenOpen(url);
});
casper.run(function() {
test.done();
});
如果你想让它更健壮,那么你需要检测页面是否完全加载。为此,您可能需要注册 "resource.error"
和 casper.page.onResourceTimeout
(Example)。