如何使用 casperjs 获取标签中的文本?

How to get a text in tag with casperjs?

我有一个 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);
        });

但是我得到了一个N​​ULL,请帮助理解这段代码中的错误?

这将更新 getLinks 以创建和 return 包含 td 的 outerHTML 字符串的区域。您不能在 getLinks 中使用 getHTML()。 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); 
});

我将你的 selector 从 tr 更新为 select td

如何使用 CasperJS 轻松获取文本内容:

CasperJS 允许您访问 textContent of elements using getElementsInfo() 及其相应的 .text 属性:

简答:

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();

这将 return 一个包含 [sometext, sometext2].

的数组