7

我是 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();

非常感谢您的帮助。谢谢

4

3 回答 3

9

你可能想看看onResourceReceived对页面对象的回调,你应该能够从那里得到你需要的东西。(API 文档...

这是一个人为的例子,它将返回作为请求的一部分检索到的每个资源的状态代码,但第一个将是页面本身(即,与支持 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(例如,与伪装成 404 的 200 相对)——但是这些方面的东西应该会给你你想要的东西。

于 2012-12-07T13:55:26.153 回答
0

我不相信 PhantomJS 目前支持返回 HTTP 响应代码。为此,WebPage对象需要公开 QNetworkReply 对象并获取其 HTTP 响应代码。

在 C++ 代码中可以这样获取 HTTP 响应代码:

int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

在将其集成到 PhantomJS 的源代码中之前,我认为您只需要测试“成功”或“失败”即可。如果您确实需要查看 HTTP 响应代码,可以运行 CURL 脚本来检查来自服务器的响应。我怀疑“成功”或“失败”对于您的目的来说是可以的。

于 2012-05-24T23:45:36.993 回答
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);
    }
});

所以你将只有你请求的页面的状态

于 2017-07-20T15:06:00.137 回答