Ich habe in Python seit ein paar Jahren gearbeitet und habe kürzlich angefangen, nach Javascript (nicht jQuery oder Abhängigkeiten, einfach nur Javascript) zu suchen Browser-Automatisierungsaufgaben.Wie man javascript-scroll prüft (und killt), wenn Unterseite der Webseite erreicht wird
Scrollen von Websites mit Lazy Load (wie eine Facebook-Seite, eine Twitter-Seite oder sogar die Wallmart-Website) in Python ist einfach mit FX Selen.
In Python kann eine grobe 'n' schmutzige Lösung ein Höhen-Check sein und aus einer while-Schleife ausbrechen, wenn die Höhe nicht mehr ansteigt. Wie so:
check_height = driver.execute_script("return document.body.scrollHeight;")
while True:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
height = driver.execute_script("return document.body.scrollHeight;")
if height == check_height:
break
check_height = height
So, jetzt versuche ich die gleiche Sache in Javascript mit der Chrome-Konsole zu erreichen. Bisher ein Arbeits Code sieht wie folgt aus:
var scrollToBottom = function() {
window.scrollTo(0, document.body.scrollHeight);
}
var sleep = 1000;
var kill_ID = setInterval(scrollToBottom, sleep);
Die setInterval löst eine Schleife, die für immer geht weiter - mit einem zweiten der Schlafzeit zwischen jedem Aufruf scrollToBottom. Und ich kann dann - manuell - töten sie, wenn nicht mehr Inhalt durch die Ausgabe geladen wird:
window.clearInterval(kill_ID);
Dies ist offensichtlich nicht der beste Weg, um dies zu realisieren. Es muss also einen besseren Weg geben, die Aufgabe zu erledigen, ohne den Scroll-Vorgang manuell beenden zu müssen.
Aber die Python-Logik scheint nicht für mich in Javascript zu arbeiten. Jeder, der mir ein paar Hinweise geben wird, wie das zu erreichen ist - ich nehme an - Grundaufgabe? Danke im Voraus.
Update: Da es offenbar keine einfachen Korrekturen für diesen, ging ich mit einer Low-Tech-Lösung und fügte eine eventlistener, dass das Scrollen tötet, wenn ich mit der Maus klicken (löst die clearInterval).
So ein zusätzlicher Code-Snippet für diese zu arbeiten - fx als Bookmarklet - müssten nur sein:
window.addEventListener('click', function kill(){window.clearInterval(kill_ID)})
Danke für die Kommentare hilfreich, alle zusammen.
Danke, Tim. Es tut mir leid, wenn mein Problem unklar ist. Bis auf den Knochen: Ich möchte scrollen, bis kein Inhalt mehr geladen ist. Wenn das passiert, möchte ich die Schriftrolle töten. Wie gehe ich im ersten Beispiel vor? Vielen Dank. – jlaur
Ich bin verwirrt darüber, was du meinst mit 'kille die Schriftrolle'. Wenn Sie keinen weiteren Inhalt laden, kann der Benutzer nicht über den unteren Rand der Seite hinaus scrollen, so dass er die Bildlaufleiste tötet. –
Es scheint, du liegst falsch. Der Code, den ich gepostet habe, wird für immer eine Schleife bilden. Als Effekt, wenn Sie versuchen, nach oben zu scrollen (oder nur ein bisschen nach oben) - nach einer Sekunde werden Sie zurück nach unten gesendet. Ich denke, das ist der Grund, warum die setInterval-Funktion ein clearInterval-Gegenstück haben muss ... – jlaur