Обычно метод эвалют передается в браузер и ваши переменные в коде ему неизвестны , это первое.
Смотрим доку:
Signature: evaluate(Function fn[, arg1[, arg2[, …]]])
То есть на вашем примере, чтобы функция, которую вызовет браузер через эвалют получила ваши ггггг
, вам надо их передать, как-то так:
casper.then(function() {
var jsonStr = this.evaluate(function(ggg,gg,g) {
var outJson = {'name1': ggg, 'name2': gg, 'name3': g};
return JSON.stringify(outJson);
}, ggg, gg, g);
Второе, casper.start('
casperjs.org', function() {}); выглядит как запуск с колбеком, так чего бы в колбеке и не работать?
Третье, если хотите использовать это как промис, попробуйте делать как в документаци:
casper.start('http://casperjs.org/');
casper.then(function() {
this.echo('First Page: ' + this.getTitle());
});
Третье, вам нужно понять, что такие парсеры - это не линейный код, а функции, которые вы передаете нужным методам, для отработки в нужных местах.
Так как я пользуюсь другим парсером, возможно часть кода написана не совсем корректно, однако, вы можете развить мою мысль в нужном направлении.