感谢您的回答
我尝试在子函数中调用casper.thenOpen,但它无法工作。
casper.start(url, function(){
console.log("Page Load");
});
casper.run(flow);
function flow()
{
testOpen.call(this,'http://www.518.com.tw/talent-detail-1376860.html');
}
function testOpen(newURL)
{
this.thenOpen(newURL);
}
我的英语不好,如果我说错了,请原谅我:)
// ============================================= =========
我试图在功能中打开新页面。
喜欢此示例https://gist.github.com/observerss/3798922
CapserJS应该使用' http://www.google.com' (第28行)
然后调用start.call(this); (第40行) 然后调用this.start(NewUrl,function();(第34行)
但第34行呼叫无效。
我不明白我的代码和我引用的示例之间的差异。
有人能告诉我问题出在哪里吗?
var casper = require('casper').create({
verbose: true,
pageSettings: {
loadImages: false, // The WebPage instance used by Casper will
loadPlugins: false, // use these settings
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4',
clientScripts: ["documents/jquery.js"]
}
});
// print out all the messages in the headless browser context
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
});
// print out all the messages in the headless browser context
casper.on("page.error", function(msg, trace) {
this.echo("Page Error: " + msg, "ERROR");
});
var google = 'http://www.google.com';
var bing = 'http://www.bing.com';
casper.start(google, function(status) {
console.log("page loaded");
this.echo(this.status(true));
});
function start(NewUrl){
this.start(NewUrl, function(){
this.echo(this.status(true));
});
};
function flow(){
start.call(this,bing);
this.exit();
};
casper.run(flow);
答案 0 :(得分:0)
casper.start
是异步的。你太早退出了。你应该删除this.exit()
调用或将其包含在像
this.then(function(){
this.exit();
});
通过casper.run
安排大部分代码也不是一个很好的风格。这是更好的(这里为了简洁的承诺语法)。
casper.start(google).then(flow).run(function(){
this.echo("DONE");
this.exit();
});
此外,您的脚本中只应有一次casper.start
。您应该使用casper.thenOpen
打开后续页面。