2015-08-19 20 views
5

Używam CasperJS do odczytywania określonej strony internetowej. Co chcę zrobić, to załadować stronę internetową w CasperJS. Następnie poczekaj, aż określony element HTML będzie zawierał określony tekst.Poczekaj, aż element będzie zawierał określony tekst z CasperJS

Więc co chciałbym zrobić to w ten sposób:

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

Więc chciałbym używać waitForText, ale z selektora CSS. Aby mógł monitorować fragment tekstu w elemencie certaim HTML. Nie jest dla mnie oczywiste, czy i jak to jest możliwe.

Czy można to zrobić w CasperJS? Jeśli tak, jak mogę to zrobić?

Odpowiedz

6

Poniższa funkcja zajmuje trochę logiki od waitForText() function i par ją 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; 
}; 

Umieść ten kod gdzieś na żebractwa skryptu i użyć funkcji podobnie jak każdej innej funkcji CasperJS. text może być ciągiem lub wyrażeniem regularnym, a selektorem może być również wyrażenie XPath (przy użyciu funkcji pomocnika).

+0

Dlaczego gniazdo czekaćNa podstawie waitForSelector? Rozumiem, że każdy dodaje krok do kolejki, więc nie powinno być żadnej różnicy między zagnieżdżaniem ich a kolejnością. –

+0

@GregBell Masz rację, nie musi być zagnieżdżona. –

Powiązane problemy