Я использую PhantomJS v2.0 и CasperJS 1.1.0-beta3. Я хочу запросить определенную часть внутри страницы DOM.Различия при использовании функций для casper.evaluate
Вот код, который не работает:
function myfunc()
{
return document.querySelector('span[style="color:#50aa50;"]').innerText;
}
var del=this.evaluate(myfunc());
this.echo("value: " + del);
А вот код, который сделал работу:
var del=this.evaluate(function()
{
return document.querySelector('span[style="color:#50aa50;"]').innerText;
});
this.echo("value: " + del);
Вроде бы то же самое, но это работает разные, я не Понимаю.
А вот код, который сделал также работать:
function myfunc()
{
return document.querySelector('span[style="color:#50aa50;"]').innerText;
}
var del=this.evaluate(myfunc);
this.echo("value: " + del);
Разница здесь, я называю MyFunc без '()'.
Может ли кто-нибудь объяснить причину?
Ах спасибо за хорошее объяснение. Это означает, что когда я пишу 'myfunc' без'() ', тогда функция не будет вызываться до того, как будет вызван метод. Вместо этого 'myfunc' будет обрабатываться как переменная и будет передан в качестве аргумента функции оценки. С эффектом «myfunc» будет вызван после того, как будет вызвана оценка? Правильно ? –
'оценка' * использует * переданную функцию, поэтому вы не можете сказать, что функция выполняется после завершения оценки. Если вы хотите знать, как он его использует, вы можете изучить исходный код PhantomJS. Аргумент 'оценка' не используется как обратный вызов, когда выполнение завершено. Это функция, чтобы оценить, что делать. –