通常,这是不可能的,因为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实例中使用多个步骤,但不要忘记指定良好的超时时间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)