使用PhantomJS考虑以下代码片段:
var reloadAfterLogin = false;
function(user, pass, debug){ // step 3 submit Login
page.evaluate(function(user, pass, debug){
if($("form").attr("action").indexOf("login.do") > 0){
reloadAfterLogin = true;
$('form').submit();
}
}, user, pass, debug);
},
据我了解,这不仅仅是一个范围问题。在page.evaluate()内部执行的代码是一个完整的独立JavaScript实例。我不得不承认我仍然很难解决PhantomJS如何工作但我需要访问page.evaluate()之外的reloadAfterLogin变量。我怎么能这样做?
答案 0 :(得分:5)
您可以evaluate
回调中return
。我想你想要
function(user, pass, debug){ // step 3 submit Login
reloadAfterLogin = page.evaluate(function(user, pass, debug){
if($("form").attr("action").indexOf("login.do") > 0){
$('form').submit();
return true;
}
return false;
}, user, pass, debug);
}
答案 1 :(得分:1)
如果由于任何原因你无法从Bergi所描述的评估回调中返回,你可以通过滥用onConsoleMessage来使用hacky解决方法:
从webpage.evaluate()中将您的数据作为JSON发送,如下所示:
console.log('{"foo": "bar"}');
然后,您可以将此数据提取到全局空间(webpage.evaluate()之外):
webpage.onConsoleMessage = function(msg) {
var obj = JSON.parse(msg);
// Do whatever you like with obj...
};