gpt4 book ai didi

javascript - casper评估修改全局变量

转载 作者:行者123 更新时间:2023-11-28 09:11:59 25 4
gpt4 key购买 nike

我是 CasperJS 新手,我在使用评估()函数时遇到问题。我有以下示例代码:

var results = [];  // a global var
var links = [link1, link2 ,....]; //a list of urls
var current = 0;

function search(url){
this.start(url, function(){
results = this.evaluate(function() {
var returnVal = [];
//some code to store data into returnVal
return returnVal;
};
})
}

function check(){
if(current<7){
this.echo('---Page' + (current + 1) + '---');
search.call(this, links[current]);
console.log(results.length);
this.run(check);
current++;
} else{
this.exit();
}

casper.start()
casper.then(function(){this.echo("starting");});
casper.run(check);

基本上,代码应该从 7 个页面收集一些数据并将数据存储在全局 var 结果中。每页可存储50条数据。所以预期的输出是:

Starting
---Page1---
50
---Page2---
100
---Page3---
150
...

但实际输出是:

Starting
---Page1---
0
---Page2---
50
---Page3---
50
...

我预计每次迭代后结果的长度都会增加。然而,当我运行它时,结果的长度保持不变,这意味着在第一次迭代之后,它从未改变。另外,我不明白为什么第1页的长度为0。我不明白这是为什么。

最佳答案

我认为这是因为,每次测试运行时,全局“结果”都会被重新分配。您需要附加到数组,而不是在每个步骤后重新分配它。类似的东西

var tempResults = this.evaluate(function() {
var returnVal = [];
// load your data from the page
return returnVal;
};


for(var i=0, j=tempResults.length; i < j; i++) {
//append to global here
results.push(tempResults[i]);
}

关于javascript - casper评估修改全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com