Ich benutze den Code von netsniff.js, um eine har file
zu generieren, und ich möchte es verbessern, um eine har-Datei aus mehreren Links in einem Array (links
in meinem unteren Code) zu generieren .Verwenden von phantom.js zum Generieren mehrerer HAR-Dateien
Es ist eine andere Frage hier Using Multiple page.open in Single Script, die mir helfen könnte, aber ich habe keine Ahnung, wie die gegebene Lösung in meinem Code zu implementieren ..
Unten ist mein Code (es meldet sich FAIL to load the address
in der Ausgabedatei, wenn der links
Array enthält mehr als ein Element):
"use strict";
if (!Date.prototype.toISOString) {
Date.prototype.toISOString = function() {
function pad(n) { return n < 10 ? '0' + n : n; }
function ms(n) { return n < 10 ? '00'+ n : n < 100 ? '0' + n : n }
return this.getFullYear() + '-' +
pad(this.getMonth() + 1) + '-' +
pad(this.getDate()) + 'T' +
pad(this.getHours()) + ':' +
pad(this.getMinutes()) + ':' +
pad(this.getSeconds()) + '.' +
ms(this.getMilliseconds()) + 'Z';
}
}
var entries = [];
function createHAR(address, title, startTime, resources)
{
resources.forEach(function (resource) {
var request = resource.request,
startReply = resource.startReply,
endReply = resource.endReply;
if (!request || !startReply || !endReply) {
return;
}
// Exclude Data URI from HAR file because
// they aren't included in specification
if (request.url.match(/(^data:image\/.*)/i)) {
return;
}
entries.push({
startedDateTime: request.time.toISOString(),
time: endReply.time - request.time,
request: {
method: request.method,
url: request.url,
httpVersion: "HTTP/1.1",
cookies: [],
headers: request.headers,
queryString: [],
headersSize: -1,
bodySize: -1
},
response: {
status: endReply.status,
statusText: endReply.statusText,
httpVersion: "HTTP/1.1",
cookies: [],
headers: endReply.headers,
redirectURL: "",
headersSize: -1,
bodySize: startReply.bodySize,
content: {
size: startReply.bodySize,
mimeType: endReply.contentType
}
},
cache: {},
timings: {
blocked: 0,
dns: -1,
connect: -1,
send: 0,
wait: startReply.time - request.time,
receive: endReply.time - startReply.time,
ssl: -1
},
pageref: address
});
});
return {
log: {
version: '1.2',
creator: {
name: "PhantomJS",
version: phantom.version.major + '.' + phantom.version.minor +
'.' + phantom.version.patch
},
pages: [{
startedDateTime: startTime.toISOString(),
id: address,
title: title,
pageTimings: {
onLoad: page.endTime - page.startTime
}
}],
entries: entries
}
};
}
var page = require('webpage').create()
var fs = require('fs');
var count = 0;
function processSites(links)
{
page.address = links.pop();
var path = 'file' + count + '.har';
page.resources = [];
console.log("page resources:", page.resources)
count = count + 1;
page.onLoadStarted = function() {
page.startTime = new Date();
};
page.onResourceRequested = function (req) {
page.resources[req.id] = {
request: req,
startReply: null,
endReply: null
};
};
page.onResourceReceived = function (res) {
if (res.stage === 'start') {
page.resources[res.id].startReply = res;
}
if (res.stage === 'end') {
page.resources[res.id].endReply = res;
}
};
page.open(page.address, function (status) {
var har;
setTimeout(function() {
if (status !== 'success') {
console.log('FAIL to load the address');
phantom.exit(1);
} else {
page.endTime = new Date();
page.title = page.evaluate(function() {
return document.title;
});
entries = [];
har = createHAR(page.address, page.title, page.startTime, page.resources);
// console.log(JSON.stringify(har, undefined, 4));
fs.write(path, JSON.stringify(har), 'w');
if(links.length > 0)
{
processSites(links);
}
else
{
phantom.exit();
}
}
}, 10000);
});
}
var links = ["http://stackoverflow.com", "http://marvel.com"];
processSites(links);
Update:
der obige Code erzeugen zwei har Dateien file1.har und file2.har, aber die zweite har-Datei enthält auch den har
Code aus beiden Verbindungen erzeugt, und es sollte nur haben der har
Code für den ersten Link ...
dieses Fest von var har = " "
Ich fand, dass die Har-Datei für '" http://edition.cnn.com "' auch den für '" http://Stackoverflow.com "generierten Har-Code enthalten wird" ... ist da eine Möglichkeit, den har-Code individuell auszugeben? – Valip
Vaviloff kannst du mir immer noch dabei helfen? Ich habe die Frage aktualisiert. Vielen Dank! – Valip
Vielleicht 'var entries = [];' sollte innerhalb der 'createHar' Funktion sein? Ich habe nicht wirklich viel darüber gelesen, die Frage war, ob man über ein Array von Links iterieren sollte und keine har-Dateien per se erstellen sollte. – Vaviloff