如何在CasperJS中打开新标签页

如何在CasperJS中打开新标签页,第1张

如何在CasperJS中打开新标签页

通常,这是不可能的,因为Casper脚本只能在一个phantomjs运行时中运行。就您而言,这似乎是可能的。

注意: 因为这依赖于第二个Casper实例,所以不能在Casper 测试 环境中使用它。

您可以

casper2
在外部Casper实例(
casper1
)的一个步骤中创建一个新的Casper实例()。然后,您必须指示
casper1
等待
casper2
实例完成,因为casper本质上是异步的。请记住,这就像一个新选项卡,因此实例将共享缓存,cookie和存储。

这是一个示例脚本:

var casper1 = require('casper').create();var casper2done = false;casper1.start("http://www.example.com").then(function(){    casper1.capture("casper1_1.png");    var casper2 = require('casper').create();    casper2.start("http://stackoverflow.com/contact").then(function(){        casper1.echo(casper2.getCurrentUrl(), casper2.getTitle());        casper2.capture("casper2.png");    }).run(function(){        this.echo("DONE 2");        casper2done = true;    });}).waitFor(function check(){    return casper2done;}).then(function(){    casper1.echo(casper1.getCurrentUrl(), casper1.getTitle()); // Comment to fix answer (min 6 chars)    casper1.capture("casper1_2.png");}).run(function(){    this.echo("DONE");    this.exit();});

在这里,我使用Promise链接/构建器模式。您甚至可以创建自己的函数来隐藏复杂性并使其可重复使用:

var casper = require('casper').create();// IIFE to hide casper2done variable(function(casper){    var casper2done = false;    casper.newTab = function(url, then, timeout){        if (typeof url !== "string" || typeof then !== "function") { throw "URL or then callback are missing";        }        this.then(function(){ var casper2 = require('casper').create(); casper2.start(url).then(then).run(function(){     casper2done = true; });        }).waitFor(function check(){ return casper2done;        }, null, null, timeout).then(function(){ casper2done = false;        });        return this;    };})(casper);casper.start("http://www.example.com").newTab("http://stackoverflow.com/contact", function(){    // this is casper2    this.echo(this.getCurrentUrl(), this.getTitle());    this.capture("casper2_1.png");    this.thenClick("a#nav-askquestion");    this.then(function(){        this.echo(this.getCurrentUrl(), this.getTitle());        this.capture("casper2_2.png");    });}, 15000).then(function(){    // this is casper    this.echo(casper.getCurrentUrl(), casper.getTitle());    this.capture("casper1.png");}).run(function(){    this.echo("DONE");    this.exit();});

您可以在 子级 Casper实例中使用多个步骤,但不要忘记指定良好的超时时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存