gpt4 book ai didi

javascript - 使用 CasperJS 正确地遍历数组和打开页面

转载 作者:行者123 更新时间:2023-11-30 16:46:56 25 4
gpt4 key购买 nike

我正在使用 CasperJS 进行一个小项目。主要思想是从某些网站的子页面获取带有标题和描述的图片链接。我已经尝试了许多不同的方法来实现我想要的,但我被一些代码困住了,我不想继续使用可能不正确的编码方式。

这是我代码中的当前事件序列:

casper.start(url);
casper.thenEvaluate(openPicturesSubpage);
casper.then(getPicturesInfo);
casper.then(getPictureFullRes);
casper.run();

前两个命令按预期工作,所以我将跳到第三个函数的结构。函数代码(我正在使用 jQuery,因为我需要在其他函数中获取一些特定的东西)getPicturesInfo(变量 pictures 是全局的):

getPicturesInfo = function() {
pictures = this.evaluate(function() {
var array = [];
$('.picture-box a').each(function() {
arr.push({
'name': $(this).text(),
'subpage': $(this).attr('href')
});
});
return array;
});
}

基本上,我拥有继续“浏览”实际全分辨率图片链接所需的一切。所以下一步是将新数据附加到已经创建的数组中。这也是我要解决的主要问题。如何正确遍历以前保存的数据数组?于是就有了最后一个函数getPictureFullRes的代码:

getPictureFullRes = function() {
for (var i = 0; i < pictures.length; i++) {
this.thenOpen(pictures[i]['subpage'], getFullResLink);
}
}

问题是我无法将计数器变量 i 传递给我的函数 getFullResLink。我还尝试向 thisOpen 方法和 getFullResLink 函数添加另一个参数,但它不起作用,因为该方法没有该功能。

如何在 getFullResLink 中访问适当的数组索引?

最佳答案

我看到了两种可能的解决方法。

使用闭包

像这样定义一个getFullResLinkWrapper:

function getFullResLinkWrapper(pictureIndex){
return function(){
// contents of getFullResLink that uses `pictureIndex`
};
}

然后你可以这样调用它:

this.thenOpen(pictures[i]['subpage'], getFullResLinkWrapper(i));

这样您就可以为 getFullResLink 的每次迭代包含索引变量。

函数内部计数

保证在CasperJS的执行过程中不会跳过then()步骤。因此,您可以轻松地在 getFullResLink 函数中增加计数器:

function getFullResLink(){
if (pictureIndex == null) {
pictureIndex = 0;
} else {
pictureIndex++;
}
...
}

关于javascript - 使用 CasperJS 正确地遍历数组和打开页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091684/

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