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を返すことを前提としています(たとえば、200が404になりすますのではなく)-しかし、これらの線に沿った何かがあなたにあなたが望むものを与えるはずです。

于 2012-12-07T13:55:26.153 に答える
0

現在、PhantomJS が HTTP 応答コードを返すことをサポートしているとは思えません。これを可能にするには、WebPageオブジェクトが QNetworkReply オブジェクトを公開し、その HTTP 応答コードを取得する必要があります。

HTTP 応答コードは、C++ コードで次のように取得できます。

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 に答える