当我在传统浏览器中与 spooky/casper/phantom 交互时,我有一个网站的行为有所不同。我想通过打印出整个 http 标头请求和对控制台或文件的响应来进行调试,以查看我的浏览器和虚拟浏览器之间的不同之处(类似于我在浏览器上使用开发人员工具的方式)。如何在诡异的事件处理程序中获取所有 http 请求/响应,包括标头?
问问题
553 次
2 回答
2
我正在通过 SpookyJS 从节点模块控制 CasperJS - 因此使用 Artjom B 的建议。我能够确定我只需要在构建对象时将事件侦听器添加到传递给 SpookyJS 的 CasperJS 选项 JSON 中。对于使用 SpookyJS 的任何人,该代码大致如下所示:
var Spooky = require( 'spooky' );
var spooky = new Spooky(
{
child: {
'transport' : 'http'
},
casper: {
logLevel: 'debug'
, verbose: true
, onResourceRequested : function( C, requestData, request ){ this.emit('console', JSON.stringify( requestData ) ) }
, onResourceReceived : function( C, response ){ this.emit('console', JSON.stringify( response ) ) }
}
}, function ( err ) {
if ( err ) {
var e = new Error( 'Failed to initialize SpookyJS' );
e.details = err;
throw e;
}
spooky.start( "www.something.com" );
spooky.run();
}
);
spooky.on('console', function (line) {
console.log(line);
});
于 2015-11-29T20:46:27.447 回答
1
在 CasperJS 中,您可以监听几个事件来为您提供更多信息。
casper.on('resource.requested', function(requestData, request) {
this.echo('Request (#' + requestData.id + '): Headers' + JSON.stringify(requestData.headers, undefined, 4));
});
有关page.onResourceRequested
更多信息,请参阅。
此外,您应该尽可能多地捕获屏幕截图,casper.capture()
以便了解正在发生的事情。
还有一些事件可以帮助您查看更多错误:
// http://docs.casperjs.org/en/latest/events-filters.html#remote-message
casper.on("remote.message", function(msg) {
this.echo("Console: " + msg);
});
// http://docs.casperjs.org/en/latest/events-filters.html#page-error
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg);
// maybe make it a little fancier with the code from the PhantomJS equivalent
});
// http://docs.casperjs.org/en/latest/events-filters.html#resource-error
casper.on("resource.error", function(resourceError) {
this.echo("ResourceError: " + JSON.stringify(resourceError, undefined, 4));
});
// http://docs.casperjs.org/en/latest/events-filters.html#page-initialized
casper.on("page.initialized", function(page) {
// CasperJS doesn't provide `onResourceTimeout`, so it must be set through
// the PhantomJS means. This is only possible when the page is initialized
page.onResourceTimeout = function(request) {
console.log('Response Timeout (#' + request.id + '): ' + JSON.stringify(request));
};
});
于 2015-11-29T20:35:29.040 回答