是否可以对已通过 getElementsInfo 检索到的元素使用 getElementsInfo?

Is It Possible to use getElementsInfo on elements already retrieved through getElementsInfo?

我想知道是否有办法调用 casperjs getElementsInfo 两次,我已经尝试过类似下面的操作,但没有成功。想知道是否有解决办法?

var rows = this.getElementsInfo('table.dateentrytable tr');
var cells = rows[0].getElementsInfo('td');

不,您不能对先前检索到的元素调用 getElementsInfo() 两次。

CasperJS returns JSON 对象数组,表示您按以下格式 select 编辑的元素:

[
    {
        "attributes": {
            "align": "left",
            "dir": "ltr",
            "id": "hplogo",
            "onload": "window.lol&&lol()",
            "style": "height:110px;width:276px;background:url(/images/srpr/logo1w.png) no-repeat",
            "title": "Google"
        },
        "height": 110,
        "html": "<div nowrap=\"nowrap\" style=\"color:#777;font-size:16px;font-weight:bold;position:relative;left:214px;top:70px\">France</div>",
        "nodeName": "div",
        "tag": "<div dir=\"ltr\" title=\"Google\" align=\"left\" id=\"hplogo\" onload=\"window.lol&amp;&amp;lol()\" style=\"height:110px;width:276px;background:url(/images/srpr/logo1w.png) no-repeat\"><div nowrap=\"nowrap\" style=\"color:#777;font-size:16px;font-weight:bold;position:relative;left:214px;top:70px\">France</div></div>",
        "text": "France\n",
        "visible": true,
        "width": 276,
        "x": 62,
        "y": 76
    }
]

如您所见,内部 HTML 表示为可通过调用 html 属性(即 rows[0].html)访问的字符串。

如果可能,您应该只修改您的 select 或您传递给 getElementsInfo() 的内容:

var cells = this.getElementsInfo('table.dateentrytable tr td');

否则,如果这不是一个选项,您可以将生成的 HTML 字符串(即 rows[0].html)解析为 DOM 元素和 select 使用的单元格getElementsByTagName() 或等效方法。

你不能,我为这种情况找到的解决方案使用 XPath 和 while 循环,例如,这段代码循环遍历行数未定义的 table:

i= 1;
var x = require('casper').selectXPath;
 while (this.exists(x('/html/body/form/div[3]/div[4]/div/div/div/table/tbody/tr[' + i + ']/td[1]'))) {
     this.echo(this.fetchText(x('/html/body/form/div[3]/div[4]/div/div/div/table/tbody/tr[' + i + ']/td[1]')));
     this.echo(this.fetchText(x('/html/body/form/div[3]/div[4]/div/div/div/table/tbody/tr[' + i + ']/td[2]')));
     i++;
}

在您的情况下,echo() 使用 getElementInfo()。