是否可以对已通过 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&&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()。
我想知道是否有办法调用 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&&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()。