如何使用CasperJS获取表'td'值?
HTML源代码如下:
<table id="my_table">
<tr id='header'>
<th>sth_head_name</th>
<th>ath_head_name</th>
<th>sth_head_name</th>
<th>sth_head_name</th>
<th>sth_head_name</th>
</tr>
<tr>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
</tr>
<tr>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
</tr>
<tr>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
<td>sth_value</td>
</tr>
</table>
我想使用CasperJS获取表值。首先,我需要选择表格的行;然后我想获得'td'值。我该如何解决这个问题?
我尝试了很多方法,但那些都行不通。我的解决方案看起来像下面你看到的类似的东西。重要的是,首先选择'table_rows';然后在for循环中选择该td值。
var table_rows = casper.getElementsByXpath("//table[@id='my_table']/tr[not(@id='header')]");
for (var i = 0; i < table_rows.length; i++) {
var firstRequiredCell_query = table_rows[j].getElementByXpath("//td[position()=2]");
var secondRequiredCell_query = table_rows[j].getElementByXpath("//td[position()=4]");
var firstRequiredCell = firstRequiredCell_query.text;
var secondRequiredCell = secondRequiredCell_query.text;
}
答案 0 :(得分:0)
CasperJS有两种情境。您只能直接从您在casper.evaluate()
1 内访问的页面上下文中访问DOM。它是沙箱,因此evaluate()
中没有在外部定义的变量。
__utils__.getElementsByXpath()
和__utils__.getElementByXpath()
仅在casper
不可用的页面上下文中可用。这两个函数直接返回DOM节点,因此这些节点本身不具有getElementByXpath()
函数。
但你根本不需要它:
casper.then(function(){
var info = this.evaluate(function(){
var table_rows = __utils__.getElementsByXpath("//table[@id='my_table']/tr[not(@id='header')]");
return table_rows.map(function(tr){
return {
a: tr.children[1].textContent,
b: tr.children[3].textContent
};
});
});
this.echo(JSON.stringify(info, undefined, 4));
});
您可以使用所有方式遍历DOM,例如children
,querySelector()
或document.evaluate()
。