当PhantomJS获取资源错误时,我可以获取失败的请求id吗?
我不太明白为什么PhantomJS只返回回调请求的url,而对于另一个,它返回请求id。如果对同一url有多个请求,那么“查找实际失败的请求”就不可能了。有人知道如何获取失败的请求id吗?为什么您真的需要请求id 由于在1.9中添加了当PhantomJS获取资源错误时,我可以获取失败的请求id吗?,phantomjs,Phantomjs,我不太明白为什么PhantomJS只返回回调请求的url,而对于另一个,它返回请求id。如果对同一url有多个请求,那么“查找实际失败的请求”就不可能了。有人知道如何获取失败的请求id吗?为什么您真的需要请求id 由于在1.9中添加了onResourceError,因此可能缺少一些信息 解决问题的一种方法是将所有请求的资源都保存在一个数组中,如示例所示。 下面是一个非常基本的实现: var page = require('webpage').create(), system = requ
onResourceError
,因此可能缺少一些信息
解决问题的一种方法是将所有请求的资源都保存在一个数组中,如示例所示。
下面是一个非常基本的实现:
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();
}
});
}
var page=require('webpage')。create(),
系统=要求(“系统”);
if(system.args.length==1){
log('Usage:netsniff.js');
幻影。出口(1);
}否则{
page.address=system.args[1];
page.resources=[];
page.onLoadStarted=函数(){
page.startTime=新日期();
};
page.onResourceRequested=功能(请求){
页面资源[请求id]={
请求:req,
startReply:null,
endReply:null
};
};
page.onResourceReceived=函数(res){
如果(res.stage==='start'){
page.resources[res.id].startReply=res;
}
如果(res.stage==='end'){
page.resources[res.id].endReply=res;
}
};
page.onResourceError=函数(resourceError){
console.log('无法加载资源(URL:'+resourceError.URL+'));
console.log('错误代码:'+resourceError.errorCode+'。说明:'+resourceError.errorString);
page.resources.forEach(函数(资源){
var request=resource.request,
endReply=resource.endReply;
if(request&&request.url==resourceError.url&&!endReply){
log('请求id为:'+请求id);
}
})
};
第页打开(第页地址、功能(状态){
瓦尔哈尔;
如果(状态!=“成功”){
console.log('加载地址失败');
幻影。出口(1);
}否则{
page.endTime=新日期();
page.title=page.evaluate(函数(){
返回文件.title;
});
控制台日志(页面标题);
phantom.exit();
}
});
}
onResourceError
,您只需要找到与错误资源url匹配的第一个/最后一个/所有记录的url。实际上,这只是旧文档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);
};
是的,我已经在用同样的方法记录所有请求及其id。但我的问题是可能有多个请求指向同一url,有些有错误,有些没有。在这种情况下,很难判断哪一个失败了。真的吗?我刚刚试过,似乎没有得到id。你使用的是哪个版本的PhantomJs?我正在使用1.9.0。尝试使用1.9.1,现在可以获取id!棒极了。谢谢