2015-09-14 1 views
2

Я хочу, чтобы получить атрибут только строки в <em> тегов HTML страницыКак получить innerHTML с помощью CasperJS?

enter image description here

Я хочу, чтобы получить "(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) 
}); 

Я пробовал th, но он возвращает «null». Как решить проблему?

ответ

4

<em> не является атрибутом элемента. Это сам элемент. casper.getElementAttribute(selector, attribute) будет правильно извлекать текст атрибута элемента, но вы хотите получить текст элемента.

Для этого вы можете использовать casper.fetchText(selector). Обратите внимание: fetchText() объединит содержимое всех согласованных элементов в одну строку. Если вы этого не хотите, вам нужно либо убедиться, что селектор соответствует только одному элементу, либо использовать другие функции, такие как casper.getElementInfo(selector).text.


Ваш второй фрагмент не может работать, потому что вы забыли " вокруг селектора и из указанной выше причине.

+0

спасибо. Я использовал casper.fetchText («h4.head em»), и он работает. –

1

Взгляните на документацию FAQ 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); 
} 

Надеется, что это помогает.

+0

@ Zakaria Acharki Большое спасибо! но он возвращает строку include "", поэтому другой ответ был лучше. Спасибо за ваш ответ. –