我是PhantomJS和Javascript的新手,我正在研究一个测试加载时间的脚本,我希望它能够检测到在测试时是否遇到404/500错误以及显示和消息的console.log。代码如下:
var page = require('webpage').create(), t, address;
t = Date.now();
var testArray =
['someURL'];
function loadTest(testURL)
{
address = testURL;
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address' + address);
return;
}
});
}
for(var i = 0; i < testArray.length; i++)
{
loadTest(testArray[i]);
t = Date.now() - t;
console.log('Testing ' + testArray[i]);
console.log('Loading time ' + t + ' msec\n');
}
phantom.exit();
非常感谢帮助。感谢
答案 0 :(得分:9)
您可能想要查看页面对象的onResourceReceived
回调,您应该能够从那里获得所需内容。 (API docs...)
这是一个人为的例子,它将为作为请求的一部分检索的每个资源返回状态代码,但第一个将是页面本身(即,与支持JS或CSS等。):
var page = require('webpage').create();
page.onResourceReceived = function(res) {
if (res.stage === 'end') {
console.log('Status code: ' + res.status);
}
};
page.open('http://some.url/that/does-not-exist', function() {
phantom.exit();
});
当然,这假设服务器实际上会返回404(例如,200伪装成404) - 但是这些行中的某些内容应该可以为您提供所需的内容。
答案 1 :(得分:0)
我不相信PhantomJS目前支持返回HTTP响应代码。为此,WebPage对象需要公开QNetworkReply对象并获取其HTTP响应代码。
可以在C ++代码中获得HTTP响应代码:
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
直到将其整合到PhantomJS的来源中,我认为你只需要测试'成功'或'失败'。如果确实需要查看HTTP响应代码,可以运行CURL脚本来检查服务器的响应。我怀疑“成功”或“失败”对你的目的来说都没问题。
答案 2 :(得分:0)
补充@founddrama答案,如果您有一个样式化的404页面并加载一些资产,onResourceReceived将显示所有这些资产的状态,所以我建议将您的代码更改为类似
var definedStatus = false;
page.onResourceReceived = function(res) {
if (res.stage === 'end' && definedStatus === false) {
definedStatus = res.status;
}
};
page.open(url, function(status) {
if (status == 'success' && definedStatus == 200) {
// do something
phantom.exit();
} else {
console.log("Erro")
phantom.exit(1);
}
});
因此您只拥有所请求页面的状态