调试PhantomJS webpage.open失败
在PhantomJS中,webpage.open接受一个状态参数设置为“success”或“fail”的回调。根据文档,如果没有发生网络错误,则为“成功”,否则为“失败”。有没有办法查看导致失败的底层网络错误调试PhantomJS webpage.open失败,phantomjs,Phantomjs,在PhantomJS中,webpage.open接受一个状态参数设置为“success”或“fail”的回调。根据文档,如果没有发生网络错误,则为“成功”,否则为“失败”。有没有办法查看导致失败的底层网络错误 我尝试加载的url在我将其放入浏览器时运行良好,当我在收到“失败”消息后拍摄屏幕截图时,我会看到我在调用webpage.open之前所在的页面(因此我不能忽略失败)。我正在使用Phantom进行测试,因此理想情况下,我希望在webpage.open失败时(或者更好的是,它永远不会失败!)能
我尝试加载的url在我将其放入浏览器时运行良好,当我在收到“失败”消息后拍摄屏幕截图时,我会看到我在调用webpage.open之前所在的页面(因此我不能忽略失败)。我正在使用Phantom进行测试,因此理想情况下,我希望在webpage.open失败时(或者更好的是,它永远不会失败!)能够以一种健壮的方式轻松获取有用的错误消息。找到了这篇文章,文中解释了如何设置回调以获取失败的根本原因: 基于该页面,您可以按如下方式打印错误:
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\'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'));
};
感谢您的回答,您可能希望概述链接中提到的信息,以防信息被删除、丢失或更改。为了未来:PhantomJS自2017年以来一直没有维护过,即使是在维护的时候,一些著名的网站也会在其下行为不端。无头镀铬是一条出路。对于Node.js和puppeter,即使API也相当接近PhantomJS提供的API。