我有一个HTML代码:
<div class="div_table_body">
<table class="part_listing">
<tr><td>sometext</td></tr>
<tr><td>sometext2</td></tr>
...
</table>
</div>
我尝试使用casperjs获取标签'td'中的文本:
function getLinks() {
var tr = document.querySelectorAll('div.div_table_body table.part_listing tr');
return Array.prototype.map.call(tr, function (e) {
return e.getHTML('td', true);
});
}
casper.then(function () {
links = this.evaluate(getLinks);
console.log('links ' +links);
});
但我得到一个NULL,请帮助理解这段代码中的错误是什么?
答案 0 :(得分:2)
这将更新getLinks
以创建并返回包含td的outerHTML字符串的区域。您无法使用getHTML()
内的getLinks
。 Casper评估getLinks
并在页面上执行此操作,因此需要使用vanilla JS。
function getLinks() {
var tr = document.querySelectorAll('div.div_table_body table.part_listing tr');
return Array.prototype.map.call(tr, function (e) {
return e.querySelector('td').outerHTML;
});
}
仅使用Casper获取:
casper.start('http://www.example.com', function() {
this.getHTML('div.div_table_body table.part_listing tr > td', true);
});
我更新了您的选择器,以便从td
s中选择tr
。
答案 1 :(得分:1)
CasperJS允许您使用textContent
及其相应的.text
属性访问getElementsInfo()
个元素:
简答:
var td = this.getElementsInfo('.div_table_body > .part_listing > tbody > tr > td');
this.echo(td[0].text); // Result: sometext
完整答案:
var casper = require('casper').create();
casper.start('https://www.example.com/', function () {
var td = this.getElementsInfo('.div_table_body > .part_listing > tbody > tr > td');
var td_array = [].map.call(td, function (element) {
return element.text.trim();
});
this.echo(td_array); // Result: sometext,sometext2
});
casper.run();
这将返回一个包含[sometext, sometext2]
的数组。