- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 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;
}
最佳答案
CasperJS 有两个上下文。您只能从 casper.evaluate()
内部访问的页面上下文直接访问 DOM 1。它是沙盒的,因此外部定义的变量在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()
.
关于javascript - 如何正确使用getElementByXpath和getElementsByXpath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239161/
我使用以下代码获取第一个表格行中的所有表格单元格。然后我想检查每个表格单元格的 innerHTML。但是在这个函数返回的对象中实际上只有第一个表格单元格在那里,所有其他属性都是空的: firstRow
下面给出了我的 casper.js 测试脚本的片段; var refObject = undefined; casper.then(function() { refObject = this.ev
我正在从网站上抓取足球比分数据。所有分数都在表格中,每个 后面有“block home matches 17”和一些独特的东西。 我在 Chrome 开发工具中测试了我的 xpath,它仅识别我需要的
我是一名优秀的程序员,十分优秀!