Концепция за оценкой - вы передадите свой код в консоль браузера и выполните свой код там. Если вы определите любую переменную внутри метода оценки, эта переменная будет локальной для этого метода. Эта область является локальной. Когда вы имеете дело с Каспер, вы должны рассмотреть область действия переменной.
Итак, когда вы пытаетесь распечатать «cookie» в основной функции, он скажет, что он не определен. Этого ожидалось.
Обратите внимание, что вы не можете использовать метод echo(), console.log() внутри метода оценки.
cookie = this.evaluate(function() { var cookieLocal=document.cookie; return cookieLocal; })
Здесь "cookieLocal" является локальной переменной. Это вернет значение переменной «cookie» Gloabal. Поэтому, когда вы пытаетесь распечатать значение в основной функции, он будет работать так, как ожидалось. Надеюсь, это заставит вас рассмотреть область применения при объявлении переменной. Вы можете напрямую вернуть ответ. Нет необходимости использовать локальную переменную.
cookie = this.evaluate(function() { return document.cookie; })
Еще одна важная вещь, которую я рекомендую, когда вы используя метод оценки. попробуйте использовать метод Try catch при разработке кода. Это не требуется в производстве по вашему требованию. Мы ничего не можем печатать внутри консоли. поэтому используйте try catch для цели отладки.
casper.then(function() { cookie = this.evaluate(function() { try { return document.cookie; } catch (e) { return e; } }) this.echo (JSON.stringify ('cookie :'+cookie)); })
Обратите внимание, что this.echo() должны быть вне оценки метода.
Надеюсь, это будет полезно.
Возможный дубликат [CasperJS передающая переменная для оценки не может заставить ее работать] (http://stackoverflow.com/questions/22597987/casperjs-passing-variable-to-evaluate-cant-get-it-to -work) –
Вот еще один дубликат: [Как установить переменную из casper.evaluate()?] (http://stackoverflow.com/questions/30091901/how-do-i-set-a-variable-from -casper-оценить) –