我试图从下面的函数返回一个值,如此。
html = casper.get_HTML(myselector);
我得到的所有回复都是"未定义" (return_html)。然而,' html'变量正确设置。全部功能正常工作。它只是返回值的问题。
你是怎么做到的?
casper.get_HTML = function(myselector) {
var return_html;
casper.waitForSelector(myselector,
function() {
var html = casper.getHTML(myselector, false);
return_html = html; //got the html
},
function() { // Do this on timeout
return_html = null;
},
10000 // wait 10 secs
);
return return_html;
};
答案 0 :(得分:1)
在CasperJS中,所有then*
和所有wait*
函数都是异步的步进函数。这意味着您无法返回在自定义函数中异步确定的内容。你必须使用回调:
casper.get_HTML = function(myselector, callback) {
this.waitForSelector(myselector,
function then() {
var html = this.getHTML(myselector, false);
callback(html);
},
function onTimeout() {
callback();
},
10000 // wait 10 secs
);
return this; // return this so that you can chain the calls
};
casper.start(url).get_HTML("#myid", function(html){
if (html) {
this.echo("success");
} else {
this.echo("failed");
}
}).run();