2015-07-20 3 views
0

Я работаю над casperjs. Я пишу следующую программу, чтобы получить выход:casperjs функция оценки не работает

var casper = require('casper').create(); 
var cookie; 
casper.start('http://wordpress.org/'); 
casper.then(function() { 
     this.evaluate(function() { 
      cookie=document.cookie; 
     }) 
    }) 

casper.then(function() { 
console.log("Page cookie"); 
console.log(cookie); 
}) 
casper.run(function() { 
this.echo('Done.').exit(); 
}) 

Выход для выше:
Страница печенье
неопределенными
Готово.

Почему это дает мне неопределенное? Помогите мне в этом.

+0

Возможный дубликат [CasperJS передающая переменная для оценки не может заставить ее работать] (http://stackoverflow.com/questions/22597987/casperjs-passing-variable-to-evaluate-cant-get-it-to -work) –

+0

Вот еще один дубликат: [Как установить переменную из casper.evaluate()?] (http://stackoverflow.com/questions/30091901/how-do-i-set-a-variable-from -casper-оценить) –

ответ

-2

удалить вар печенье

 cookie = casper.evaluate(function() { 
       return document.cookie; 
     }) 
     casper.then(function() { 
       console.log("Page cookie");  
       console.log(cookie);   
     }) 

Приведенный выше код отлично работает для меня.

+0

почему? выше работы кода fi9 для меня, обсудим, что представляет собой реальная проблема –

1

Концепция за оценкой - вы передадите свой код в консоль браузера и выполните свой код там. Если вы определите любую переменную внутри метода оценки, эта переменная будет локальной для этого метода. Эта область является локальной. Когда вы имеете дело с Каспер, вы должны рассмотреть область действия переменной.
Итак, когда вы пытаетесь распечатать «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() должны быть вне оценки метода.
Надеюсь, это будет полезно.

Смежные вопросы