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

时间:2017-09-21 17:36:47

标签: javascript phantomjs 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);
        });

但我得到一个NULL,请帮助理解这段代码中的错误是什么?

2 个答案:

答案 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轻松获取文本内容:

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]的数组。