2013-05-11 12 views
42

W witrynie PhantomJS strona webpage.open przyjmuje wywołanie zwrotne z parametrem statusu ustawionym na "sukces" lub "niepowodzenie". Według dokumentów będzie to "sukces", jeśli nie wystąpią błędy sieciowe, inaczej "nie powiedzie się". " Czy istnieje sposób, aby zobaczyć podstawowy błąd sieci, który spowodował awarię?Usuwanie błędów w witrynie PhantomJS.open

Adres URL, który próbuję wczytać, działa poprawnie, gdy umieściłem go w przeglądarce, a kiedy robię zrzut ekranu po otrzymaniu komunikatu "niepowodzenie", widzę stronę, na której byłem, zanim zadzwoniłem na stronę webpage.open (więc nie mogę po prostu zignorować porażki). Używam Phantoma do testowania, więc najlepiej powinienem mieć niezawodny sposób na uzyskanie użytecznego komunikatu o błędzie, gdy strona internetowa nie powiedzie się (lub lepiej, ale nigdy się nie zawiedzie)

Odpowiedz

60

Znaleziono ten wpis, który wyjaśnia, jak skonfigurować callbacków dostać na przyczynie niepowodzenia: http://newspaint.wordpress.com/2013/04/25/getting-to-the-bottom-of-why-a-phantomjs-page-load-fails/

Opierając się na tej stronie, można wydrukować błędy w następujący sposób:

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

strony, aby pokazać przykład szczegółowe rejestrowanie idzie dla fantomów

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\'s 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')); 
}; 
+2

Nie zapomnij oznaczyć swojej odpowiedzi jako zaakceptowanej. – Stephan

+0

Dzięki za odpowiedź, możesz chcieć nakreślić informacje wymienione w linku w przypadku, gdy informacje zostaną usunięte, utracone lub zmienione – Tim

Powiązane problemy