2016-03-29 7 views
2

Ich habe die von der Webseite abgerufen folgende:Klicken Sie auf ein Element auf der Grundlage seiner Textinhalt in CasperJS

<a href="#" onclick="onClkRdMsg(this, 'IPM.Note', 1, b4);">next page</a> 

die onclick=onClkRdMsg ständig ändert, ist es eine Methode, auf der nächsten Seite klicken direkt?

seit der onclick Selektor ändert sich ständig, und die href = # wenn nicht funktioniert, tut mir leid, dass Code hier nicht enthalten.

wollen nur wissen, wie auf der nächsten Seite klicken ...

casper.then(function(){ 
    this.click("[????='next page']"); 
}); 

was die ????

+0

Hat einer von die gegebenen Antworten helfen? –

Antwort

0

Sie haben, ist jeder Link auf der Seite für Text „nächste Seite“ zu überprüfen:

casper.evaluate(function(){ 
    var tags = document.getElementsByTagName("a"); 
    var searchText = "next page"; 
    var found; 

    for (var i = 0; i < tags.length; i++) { 
     if (tags[i].textContent == searchText) { 
     found = tags[i]; 
     found.click(); 
     break; 
     } 
    } 
}) 

Basierend auf How to get element by innerText

+0

Überprüft und arbeitet an CasperJS v 1.1.0-b5 und PhantomJS 2.1.1 – Vaviloff

+1

Es ist besser, 'tags [i] .textContent.indexOf (searchText)! = -1' zu verwenden, falls Leerzeichen um den Suchbegriff vorhanden sind. –

2

casper.click("[????='next page']"); ruft einen Klick mit einem CSS-Selektor auf. CSS-Selektoren können einem Element basierend auf seinem Inhalt (Text) nicht entsprechen.

Es ist mit XPath-Ausdrücken einfach, aber:

var x = require('casper').selectXPath; 
... 
casper.click(x('//*[contains(text(),"next page")]')); 

Wenn Sie sicher sind, dass keine Leerzeichen es um den Suchtext ist, dann können Sie auch casper.clickLabel() verwenden:

casper.clickLabel('next page'); 
Verwandte Themen