SpookyJS: Консоль.тогда журнал не работает внутри
try {
var Spooky = require("spooky");
} catch (e) {
console.log(e);
}
var spooky = new Spooky({
capser: {
logLevel: "debug",
verbose: true
},
child: {
command: "./casperjs/bin/casperjs",
port: 8081,
spooky_lib: "./node_modules/spooky/"
}
}, function (err) {
if(err) {
console.log(err);
}
spooky.start("http://www.google.com");
spooky.then(function () {
console.log("7331");
this.emit("printmsg", "1337");
});
spooky.run();
});
spooky.on("printmsg", function (msg) {
console.log(msg);
});
spooky.on("error", function (e) {
console.error(e);
});
При запуске, 1337
будет отображаться, но 7331
не будет. Почему это так? Причина, по которой я спрашиваю, заключается в том, что это затрудняет отладку, когда вы хотите регистрировать значения определенных переменных.
Также, если вы хотите изменить функцию then следующим образом:
spooky.then(function () {
var self = this;
this.evaluate(function () {
self.emit("printmsg", "Hello World!");
});
});
Это не сработает, потому что evaluate
не имеет доступа к переменной self. В PhantomJS вы можете сделать это page.evaluate(function (self) {
, но это не работает, когда я пытаюсь сделать это с Spooky. Поэтому очень трудно регистрировать данные, когда вы хотите к.
Есть ли способ обойти это?
2 ответа:
Я нашел, что вызвало у меня эту проблему с момента публикации этого вопроса, поэтому я поделюсь ответом ниже, если кто-то еще столкнется с подобной проблемой:
В стандартном примере быстрого запуска на странице SpookyJS Github есть закомментированный слушатель событий консоли в Spooky, который при раскомментировании вызовет появление на экране всех выходных данных Casper:
// Uncomment this block to see all of the things Casper has to say. // There are a lot. // He has opinions. spooky.on('console', function (line) { console.log(line); });
Когда этот прослушиватель событий установлен, он будет записывать все выходные данные Каспера на экран. То примеры, которые я пытался войти в консоль в моем вопросе, были запущены внутри вызовов, которые Spooky передавал Касперу для обработки, поэтому я не видел их отображения. С этим набором прослушивателя событий появляется мой вывод, а также вывод, используемый вызовом функции
__utils__.echo
в ответе xShirase.Кроме того, Casper предоставляет функцию
echo
, которая может использоваться для отправки выходных данных за пределы функции оценки Каспера, которая по умолчанию имеет доступ только к области просматриваемая Страница:spooky.then(function () { this.echo("foo"); });
Поскольку стандартная конфигурация устанавливает уровень регистрации Каспера в
debug
и устанавливает подробный вход в систему, после установки этого прослушивателя событий будет отображаться много информации. Этого можно избежать, установив уровень ведения журналаerror
или какой-либо другой уровень ведения журнала , поддерживаемый Casper.
О, как я с этим справлялся! Сначала я в основном делал :
var msg = this.evaluate(function () { return('1337'); }); console.log(msg);
Затем я обнаружил, что Каспер вводит действительно полезный модуль clientutils на каждую страницу: http://docs.casperjs.org/en/latest/modules/clientutils.html
Он позволяет отправлять журналы с удаленного DOM следующим образом:
casper.then(function () { this.evaluate(function () { __utils__.echo('1337'); }); });