javascript – 使用CasperJS迭代网格

我正在尝试测试CasperJS,并正在抓取一个网格布局,如:
|Name      |Name      |
|Title     |Title     |
|Image     |Image     |
|Something |Something |
|----------------------
|Name      |Name      |
|Title     |Title     |
|Image     |Image     |
|Something |Something |
|----------------------

如果我没有使用CasperJS,我将检索所有包含的列表(在本例中为4),然后在每个容器上运行一个方法,该方法可以检索具有所需属性的对象.

我似乎很难在CasperJS中做到这一点.首先,我尝试在casper.evaluate(function(){….})中返回DOM元素列表,但它不能返回DOM元素.

然后我尝试创建一个每个循环,它将所需的对象(4)推送到一个数组,并在Evalue中返回它,但它一直返回null.

如何在CasperJS中做这样的事情.我可以以某种方式将容器的上下文返回给方法,该方法可以将对象返回到主要求值,这可以返回对象的集合吗?

解决方法

不幸的是,你无法从evaluate()函数中获得复杂的结构,因为从evaluate()传递的任何arg都是JSON.parse(JSON.stringify(arg)).

但这并不意味着你无法传递另一种物体.

这里有一个关于如何从casper.evaluate()获取带有对象的数组的示例:

var arrayResult = this.evaluate(function getGridResuls(){

    //create array
    var arrayObjects = new Array();

    //Iterates over table (grid) elements
    jQuery("table.results").each(function( index ) {

        //get table (grid)
        var tableResult = jQuery(this);

        //create basic object    
        objResult = new Object();

        //fill object properties
        objResult.name      = tableResult.find('selector to get name').text();
        objResult.title     = tableResult.find('selector to get title').text();
        objResult.image     = tableResult.find('selector to get image info').text();
        objResult.something = tableResult.find('selectot to get something').text().trim();

        //assign object to array
        arrayObjects[index] = objResult;

    });  

    //return array with objects
    return arrayObjects;

});

...
//do something with arrayResult

我假设Web上下文包含JQuery库.

提示:尝试使用浏览器控制台运行evaluate()函数的js代码,以确保您的js代码按预期工作.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...