如何在功能中启动新页面

时间:2014-10-06 03:14:31

标签: javascript casperjs

感谢您的回答

我尝试在子函数中调用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);

1 个答案:

答案 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打开后续页面。