我不太明白为什么PhantomJS只返回onResourceError回调请求的url,而另一个two resource callbacks则返回请求ID。如果对同一个URL有多个请求,那么“找到哪个请求确实失败了”真的是不可能的。有谁知道如何获取失败的请求ID?
答案 0 :(得分:2)
实际上,这只是旧文档。 onResourceError
具有失败请求的ID。
page.onResourceError = function(resourceError) {
console.log('Unable to load resource (request ID:' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};
答案 1 :(得分:1)
为什么你真的需要请求身份证?
由于1.9中添加了onResourceError
,因此可能缺少某些信息。
解决问题的一种方法是在数组中保留所有请求的resourcessuach,如netsniff示例中所示。 这是一个非常基本的实现:
var page = require('webpage').create(),
system = require('system');
if (system.args.length === 1) {
console.log('Usage: netsniff.js <some URL>');
phantom.exit(1);
} else {
page.address = system.args[1];
page.resources = [];
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.onResourceError = function(resourceError) {
console.log('Unable to load resource (URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
page.resources.forEach(function (resource) {
var request = resource.request,
endReply = resource.endReply;
if (request && request.url === resourceError.url && !endReply) {
console.log('request id was :' + request.id);
}
})
};
page.open(page.address, function (status) {
var har;
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;
});
console.log(page.title);
phantom.exit();
}
});
}
onResourceError
,您只需找到与错误资源网址匹配的第一个/最后一个/所有录制的网址。