Подтвердить что ты не робот

Отладка ошибок PhantomJS webpage.open

В PhantomJS webpage.open выполняет обратный вызов с параметром статуса, который установлен на "успех" или "сбой". Согласно документам, это будет "успех", если не возникнет сетевых ошибок, иначе "сбой". Есть ли способ увидеть сетевую ошибку, которая вызвала сбой?

URL-адрес, который я пытаюсь загрузить, отлично работает, когда я помещаю его в свой браузер, и когда я делаю снимок экрана после получения сообщения об ошибке, я вижу страницу, на которой я был, до того, как я вызвал webpage.open(так Я не могу просто игнорировать неудачу). Я использую Phantom для тестирования, поэтому в идеале я бы хотел получить надежный способ получения полезной ошибки, когда webpage.open терпит неудачу (или еще лучше ее никогда не сбой!)

4b9b3361

Ответ 1

Нашел этот пост, в котором объясняется, как настроить обратные вызовы, чтобы определить причину сбоя: http://newspaint.wordpress.com/2013/04/25/getting-to-the-bottom-of-why-a-phantomjs-page-load-fails/

На основании этой страницы вы можете распечатать ошибки следующим образом:

page.onResourceError = function(resourceError) {
    console.error(resourceError.url + ': ' + resourceError.errorString);
};

На странице будет показан пример подробного ведения журнала для фантомов

var system = require('system');

page.onResourceRequested = function (request) {
    system.stderr.writeLine('= onResourceRequested()');
    system.stderr.writeLine('  request: ' + JSON.stringify(request, undefined, 4));
};

page.onResourceReceived = function(response) {
    system.stderr.writeLine('= onResourceReceived()' );
    system.stderr.writeLine('  id: ' + response.id + ', stage: "' + response.stage + '", response: ' + JSON.stringify(response));
};

page.onLoadStarted = function() {
    system.stderr.writeLine('= onLoadStarted()');
    var currentUrl = page.evaluate(function() {
        return window.location.href;
    });
    system.stderr.writeLine('  leaving url: ' + currentUrl);
};

page.onLoadFinished = function(status) {
    system.stderr.writeLine('= onLoadFinished()');
    system.stderr.writeLine('  status: ' + status);
};

page.onNavigationRequested = function(url, type, willNavigate, main) {
    system.stderr.writeLine('= onNavigationRequested');
    system.stderr.writeLine('  destination_url: ' + url);
    system.stderr.writeLine('  type (cause): ' + type);
    system.stderr.writeLine('  will navigate: ' + willNavigate);
    system.stderr.writeLine('  from page\ main frame: ' + main);
};

page.onResourceError = function(resourceError) {
    system.stderr.writeLine('= onResourceError()');
    system.stderr.writeLine('  - unable to load url: "' + resourceError.url + '"');
    system.stderr.writeLine('  - error code: ' + resourceError.errorCode + ', description: ' + resourceError.errorString );
};

page.onError = function(msg, trace) {
    system.stderr.writeLine('= onError()');
    var msgStack = ['  ERROR: ' + msg];
    if (trace) {
        msgStack.push('  TRACE:');
        trace.forEach(function(t) {
            msgStack.push('    -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : ''));
        });
    }
    system.stderr.writeLine(msgStack.join('\n'));
};