我一直在网站上寻找这个答案,但所有答案似乎都是特定于jQuery的。
我使用Casper JS构建一个刮刀,我找不到合适的方法来选择列n的值,其中n是我指定的任意数字。
我特意以这种方式选择表格:
document.querySelector('table.table-responsive.table-noborder');
然后我回来了TableElement但是从那里开始,我不知道如何前进来获取特定列的内容,而不必迭代整个表(这就是我&# 39; m最终做的是获取数据)
谢谢!
答案 0 :(得分:2)
您可以使用document.getElementsByTagName('table')[m]
访问相关的第m个索引表。
同样,你可以遍历表格,并通过innerHTML或nodeValue获取文本内容
document.getElementsByTagName('table')[2].getElementsByTagName('tr')[1].childNodes[0].innerHTML
document.getElementsByTagName('table')[2].getElementsByTagName('tr')[1].childNodes[0].nodeValue
答案 1 :(得分:1)
你可以编写自己的函数,可以很好地插入到casper中。这将迭代所有行中的第n个td
或th
,并将innerText属性的值写入结果数组中:
casper.tableColumnText = function(tableSelector, columnNumber, withHeader, merged){
// columnNumber starts with 1
var texts = this.evaluate(function(tableSelector, columnNumber, withHeader){
var headerFields = document.querySelectorAll(tableSelector + " > thead > tr > th:nth-child("+columnNumber+")"),
bodyFields = document.querySelectorAll(tableSelector + " > tbody > tr > td:nth-child("+columnNumber+")"),
result = [];
if (withHeader) {
Array.prototype.forEach.call(headerFields, function(headerField){
result.push(headerField.innerText);
});
}
Array.prototype.forEach.call(bodyFields, function(bodyField){
result.push(bodyField.innerText);
});
return result;
}, tableSelector, columnNumber, withHeader);
if (merged) {
return texts.join(' ');
}
return texts;
};
浏览器(幻像)将注入 tbody
,即使它没有出现在原始标记中。