2015-08-19 13 views
5

Sto utilizzando CasperJS per leggere una determinata pagina web. Quello che voglio fare è caricare una pagina web in CasperJS. Quindi, attendi che un determinato elemento HTML abbia un testo specifico.Attendi che un elemento abbia un testo specifico con CasperJS

Quindi quello che vorrei fare è questo:

var casper = require('casper').create(); 

casper.start('http://www.example.com/somepage', function() { 
    this.echo('Home page opened'); 
}); 

// wait for text based on a CSS selector 
casper.waitForText('.someCssClass', 'dolor sit', function() { 
    this.echo('found title!'); 
}); 

// when text is eventually found, then continue with this 
casper.then(function() { ... }); 

casper.run(); 

Così mi piacerebbe usare waitForText, ma con un selettore CSS. In modo che possa monitorare un pezzo di testo in un certo elemento HTML. Non è molto ovvio per me se e come sia possibile.

È possibile farlo in CasperJS? Se è così, come posso farlo?

risposta

6

La seguente funzione richiede un po 'di logica dal waitForText() function unendolo ad waitForSelector():

var utils = require("utils"); 
casper.waitForSelectorText = function(selector, text, then, onTimeout, timeout){ 
    this.waitForSelector(selector, function _then(){ 
     this.waitFor(function _check(){ 
      var content = this.fetchText(selector); 
      if (utils.isRegExp(text)) { 
       return text.test(content); 
      } 
      return content.indexOf(text) !== -1; 
     }, then, onTimeout, timeout); 
    }, onTimeout, timeout); 
    return this; 
}; 

Mettete questo codice da qualche parte alla supplica del vostro script e utilizzare la funzione esattamente come qualsiasi altra funzione CasperJS. text può essere una stringa o un'espressione regolare e il selettore può anche essere un'espressione XPath (utilizzando la funzione di supporto).

+0

Perché nidificare waitFor in attesaForSelector? La mia comprensione è che ognuno aggiunge un passo alla coda, quindi non ci dovrebbe essere alcuna differenza tra annidarli e renderli sequenziali. –

+0

@GregBell Hai ragione, non deve essere annidato. –

Problemi correlati