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

问题描述 投票:0回答:2

我想知道是否有办法两次调用casperjs getElementsInfo,我试图做一些类似于下面的事情没有运气。想知道是否有解决方法吗?

var rows = this.getElementsInfo('table.dateentrytable tr');
var cells = rows[0].getElementsInfo('td');
javascript phantomjs casperjs
2个回答
1
投票

你不能,我发现像这样的情况使用XPath和while循环的解决方案,例如,这个代码循环通过一个具有未定义行数的表:

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()。


0
投票

No, you cannot call getElementsInfo() twice on a previously retrieved element.

CasperJS返回一个JSON对象数组,表示您按以下格式选择的元素:

[
    {
        "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
    }
]

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

如果可能,您应该只修改传递给getElementsInfo()的选择器:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.