2017-06-07 3 views
-1

Versuchen, eine Aufgabe im Browser mit Greasemonkey zu automatisieren.Javascript synchrone Schleife im Browser

Anforderung: Laden Sie eine Webseite, die eine Tabelle enthält, die 15 von 340 + Ergebnissen anzeigt, mit Schaltflächensteuerung, um die Ergebnisse der nächsten Seite zu sehen, zurückzugehen, zum Ende zu gehen und so weiter.

  1. Sammeln Sie die ersten 15 Ergebnisse -> habe diese Arbeit
  2. Klicken Sie auf die Schaltfläche ‚Weiter‘ -> bekam diese
  3. Arbeits Warten Sie, bis die Seite mit dem nächsten Satz von Ergebnissen lädt - >weiß nicht, wie
  4. wiederholen, bis die nächste Taste deaktiviert -> erhielt diese

Cant zeigen Bilder cuz seine Corporate eine Arbeits pp.

Bisher wenn ich Schleife mit setTimeouts, erhält die Timeouts Warteschlange gestellt und zur gleichen Zeit ich denke, ausgeführt. Stattdessen muss der Code die Infosammlung ausführen, auf Weiter klicken, warten und dann erneut Informationen sammeln.

+0

-Warum für die Seite warten, bis die nächsten 15 Ergebnisse laden? ! –

Antwort

0

könnten Sie versuchen, eine Nutzenfunktion waitForKeyElement, ein Greasemonkey-Skript-Dienstprogramm. Es macht im Wesentlichen das, was du vorher versucht hast. Es legt eine Zeitüberschreitung fest, um kontinuierlich zu prüfen, ob ein Element geladen ist. Es würde in etwa so aussehen:

waitForKeyElements (
    "div.comments", 
    commentCallbackFunction 
); 

Wo Kommentar Callback-Funktion wäre die Funktion, die Ergebnisse sammelt.

Es würde auch helfen zu verstehen, warum setTimeout in einer Schleife nicht funktioniert. setTimeout blockiert nicht die Ausführung eines Skripts, um die Callback-Funktion auszuführen. Es stellt die Funktion in eine Warteschlange, die nicht früher als die Zeit ausgeführt werden soll, die Sie als zweiter Parameter übergeben haben. Aus diesem Grund wird die Schleife sehr schnell ausgeführt und anstelle von Funktionsaufrufen unter 3000ms, 6000ms, and 9000ms..., wie Sie möglicherweise erwarten, dass Sie etwas näher an Funktionsaufrufe bei 3000ms, 3001ms, 3002ms erhalten.

0

können Sie beliebige JS Logik mit API-Aufrufe, Rekursion gemischt ausführen und Timeouts sequentiell über synchrone Testamentsvollstrecker nsynjs:

function synchronousCode() { 
 
    var i=0; 
 
    while(true) { 
 
     console.log("waiting 1 sec, iteration", i++); 
 
     $('#myDiv').toggle(); 
 
     nsynWait(nsynjsCtx,1000); 
 
    }; 
 
} 
 

 
var ctx; 
 
function btnStopClicked() { 
 
    ctx.stop(); 
 
    ctx=null; 
 
} 
 

 
function btnStartClicked() { 
 
    ctx=nsynjs.run(synchronousCode,{},function(){ 
 
\t \t \t console.log("Synchronous Code done"); 
 
\t \t }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<script src="https://rawgit.com/amaksr/nsynjs/master/nsynjs.js"></script> 
 
<script src="https://rawgit.com/amaksr/nsynjs/master/wrappers/nsynWait.js"></script> 
 
<body> 
 
    <button id="buttonStart" onclick="btnStartClicked()">Start</button> 
 
    <button id="buttonStop" onclick="btnStopClicked()">Stop</button> 
 
    <div id="myDiv">Flashing div</div> 
 
</body>

weitere Beispiele finden Sie hier: https://github.com/amaksr/nsynjs/tree/master/examples

0

Dank Leute, fand diesen Beitrag, um die beste Antwort zu sein Synchronous setTimeout + Loop

Auf diese Weise wird die Seite geladen, die ersten Werte werden gelesen, die nächste Schaltfläche wird geklickt, die nächsten Ergebnisse werden angezeigt und gelesen, bis zur letzten Seite.

Nochmals vielen Dank für die Eingabe und Ideen

Verwandte Themen