如何使用CasperJS获取innerHTML?

时间:2015-09-14 18:44:05

标签: javascript casperjs innerhtml

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

enter image description here

我想得到&#34;(868)&#34;

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

我试过了两次,但它返回&#34; null&#34;如何解决问题?

2 个答案:

答案 0 :(得分:7)

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

您可以使用casper.fetchText(selector)。请注意,fetchText()会将所有匹配元素的内容连接成一个字符串。如果您不想要,则需要确保选择器仅匹配单个元素或使用其他功能,例如casper.getElementInfo(selector).text

您的第二个代码段无法使用,因为您在选择器周围忘记了"并且由于上述原因。

答案 1 :(得分:2)

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

在您在问题中添加的两个示例中,您试图将em元素作为h4的属性而错误,因为em是一个孩子,而不是属性h4标记,因此要选择元素textContent,您可以尝试使用querySelector函数evaluate,如下所示:

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

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

希望这有帮助。