如何使用 CasperJS 获取 innerHTML?

How to get innerHTML using CasperJS?

我只想获取 HTML 页面 <em> 标签中字符串的属性

我想得到“(868)”

1.

casper.then(function() {
     var word = require('utils').dump(this.getElementAttribute(x('//*[@id="content"]/div[2]/h4/em'), 'em'));
     console.log(word)
});

2.

casper.then(function() {
    var word = require('utils').dump(this.getElementAttribute(h4[class="head"], 'em'));
    console.log(word)
});

两个都试过了returns"null"如何解决这个问题?

<em> 不是元素属性。它本身就是一个元素。 casper.getElementAttribute(selector, attribute) 将正确检索元素的属性文本,但您想要获取元素文本。

您可以使用 casper.fetchText(selector)。请注意 fetchText() 会将所有匹配元素的内容连接成一个字符串。如果您不希望这样,您要么需要确保选择器只匹配单个元素,要么使用其他函数,例如 casper.getElementInfo(selector).text.


您的第二个代码段无法工作,因为您忘记了 " 选择器以及上述原因。

查看文档常见问题 Can I access & manipulate DOM elements directly from the CasperJS environment?.

在您在问题中添加的两个示例中,您试图将 em 元素作为 h4 的属性,但这是错误的,因为 em 是 child 而不是 h4 标记的属性,因此对于元素的 select textContent 您可以尝试将 querySelectorevaluate 函数一起使用,如下所示:

casper.then(function() {
    var text = this.evaluate(function(){
        return document.querySelector("h4.head em").textContent;
    });

    var word = require('utils').dump(text);
    console.log(word);
}

希望对您有所帮助。