Loop for casper.start 只执行一次
Loop for casper.start only executed once
我得到了以下脚本来遍历页面的选项以获取后续值:
var casper = require('casper').create();
casper.on('remote.message', function (message) {
this.echo(message);
});
casper.on( 'page.error', function (msg, trace) {
this.echo( 'Error: ' + msg, 'ERROR' );
});
casper.start(url, function() {
this.evaluate(function() {
// nothing
});
this.then(function() {
ddlArea_options = this.getElementsAttribute('#ddlArea option', 'value');
for(var i = 0; i < ddlArea_options.length; i++) {
if(ddlArea_options[i] != '') {
this.echo(ddlArea_options[i]);
startQuery('myID', ddlArea_options[i]);
}
}
});
});
其中 startQuery(id, val)
是一个包含 casper.start()
:
的函数
function startQuery(id, val) {
casper.start(url, function() {
this.echo('startQuery started');
var obj = {};
obj['#' + id] = val;
this.fillSelectors('#form1', obj, true);
this.evaluate(function() {
__doPostBack('ddlArea', '');
});
this.then(function() {
this.echo("doPostback complete");
var values = this.getElementsAttribute('#anotherSelect option', 'value');
for(var i = 0; i < values.length; i++) {
this.echo(values[i]);
}
});
});
casper.run();
}
但 startQuery()
仅在 for 循环的最后一项上执行一次。我错过了什么?
每个 casper
个实例只能有一对 start
-run
。 start
重置之前的所有步骤,因此队列中的所有内容都消失了。在 startQuery
中,您可以将 casper.start
更改为 casper.thenOpen
并完全删除 casper.run
。
我得到了以下脚本来遍历页面的选项以获取后续值:
var casper = require('casper').create();
casper.on('remote.message', function (message) {
this.echo(message);
});
casper.on( 'page.error', function (msg, trace) {
this.echo( 'Error: ' + msg, 'ERROR' );
});
casper.start(url, function() {
this.evaluate(function() {
// nothing
});
this.then(function() {
ddlArea_options = this.getElementsAttribute('#ddlArea option', 'value');
for(var i = 0; i < ddlArea_options.length; i++) {
if(ddlArea_options[i] != '') {
this.echo(ddlArea_options[i]);
startQuery('myID', ddlArea_options[i]);
}
}
});
});
其中 startQuery(id, val)
是一个包含 casper.start()
:
function startQuery(id, val) {
casper.start(url, function() {
this.echo('startQuery started');
var obj = {};
obj['#' + id] = val;
this.fillSelectors('#form1', obj, true);
this.evaluate(function() {
__doPostBack('ddlArea', '');
});
this.then(function() {
this.echo("doPostback complete");
var values = this.getElementsAttribute('#anotherSelect option', 'value');
for(var i = 0; i < values.length; i++) {
this.echo(values[i]);
}
});
});
casper.run();
}
但 startQuery()
仅在 for 循环的最后一项上执行一次。我错过了什么?
每个 casper
个实例只能有一对 start
-run
。 start
重置之前的所有步骤,因此队列中的所有内容都消失了。在 startQuery
中,您可以将 casper.start
更改为 casper.thenOpen
并完全删除 casper.run
。