Console.log не работает в CasperJS 'с помощью setTimeout
Почему, когда я использую console.log
в evaluate
, он работает:
casper.then(function() {
this.evaluate( function() {
console.log('hello');
});
});
Но это не работает:
casper.then(function() {
this.evaluate( function() {
setTimeout( function() {console.log('hello');}, 1000);
});
});
Ответы
Ответ 1
Потому что вы смешиваете casperjs и удаленные среды страниц. Функция evaluate
выполняет код на удаленной странице env, поэтому вызов console.log
ничего не выводит.
Если вы хотите поймать вызовы remote console.log
, прослушайте событие remote.message
:
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})
Btw, документация для событий является довольно исчерпывающей, а также для оценки.
Ответ 2
Ответ на @NiKo имеет решающее значение.
Я также предлагаю добавить следующее, так как если есть ошибка, вы можете даже не сделать это достаточно далеко, чтобы распечатать консоль console.log(), а вместо этого закончите молчание.
casper.on( 'page.error', function (msg, trace) {
this.echo( 'Error: ' + msg, 'ERROR' );
});
Ответ 3
CasperJS включает ClientUtils, который можно использовать с удаленной страницы, чтобы легко входить в консоль casper script:
__utils__.echo('This message is logged from the remote page to the CasperJS console');
Ответ 4
Основываясь на ответе @odigity, это заставляет casperjs умирать с более знакомой ошибкой /stacktrace:
var util = require('util');
casper.on('page.error', function exitWithError(msg, stack) {
stack = stack.reduce(function (accum, frame) {
return accum + util.format('\tat %s (%s:%d)\n',
frame.function || '<anonymous>',
frame.file,
frame.line
);
}, '');
this.die(['Client-side error', msg, stack].join('\n'), 1);
});