So scrollen Sie mit Phantomjs nach unten, um dynamischen Inhalt zu laden
Ich versuche, Links von einer Seite zu entfernen, die Inhalte dynamisch generiert, während der Benutzer nach unten scrollt (unendliches Scrollen). Ich habe versucht, verschiedene Dinge mit Phantomjs zu tun, konnte aber keine Links über die erste Seite hinaus sammeln. Angenommen, das Element am unteren Rand, das den Inhalt lädt, hat eine Klasse.has-more-items
. Es ist verfügbar, bis der endgültige Inhalt während des Bildlaufs geladen wird und dann in DOM nicht mehr verfügbar ist (Anzeige: Keine). Hier sind die Dinge, die ich versucht habe-
var page = require('webpage').create();
page.viewportSize = {width: 1600, height: 10000,};
Verwendenpage.scrollPosition = { top: 10000, left: 0 }
Innerhalbpage.open
aber haben keine Wirkung wie-page.open('http://example.com/?q=houston', function(status) {
if (status == "success") {
page.scrollPosition = { top: 10000, left: 0 };
}
});
Ich habe auch versucht, es hineinzulegenpage.evaluate
funktion aber das gibtReferenzfehler: Variablenseite kann nicht gefunden werden
Versucht mit jQuery und JS-Code im Innerenpage.evaluate
undpage.open
aber ohne Erfolg$ ("html, body"). animate ({scrollTop: $ (document) .height ()}, 10, function () {//console.log('check for execution ');});
wie es ist und auch drinnendocument.ready
. Ähnliches gilt für JS
window.scrollBy(0,10000)
wie es ist und auch drinnenwindow.onload
Ich bin jetzt seit 2 Tagen wirklich begeistert und nicht in der Lage, einen Weg zu finden. Jede Hilfe oder Hinweis wäre dankbar.
Aktualisieren
Ich habe einen hilfreichen Code unter gefundenhttps://groups.google.com/forum/?fromgroups=#!topic/phantomjs/8LrWRW8ZrA0
var hitRockBottom = false; while (!hitRockBottom) {
// Scroll the page (not sure if this is the best way to do so...)
page.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
// Check if we've hit the bottom
hitRockBottom = page.evaluate(function() {
return document.querySelector(".has-more-items") === null;
}); }
Woher.has-more-items
ist die Elementklasse, auf die ich zugreifen möchte. Sie befindet sich anfangs unten auf der Seite. Wenn wir nach unten scrollen, bewegt sie sich weiter nach unten, bis alle Daten geladen sind und dann nicht mehr verfügbar sind.
Beim Testen ist jedoch klar, dass es in Endlosschleifen läuft, ohne nach unten zu scrollen (ich rendere zu überprüfende Bilder). Ich habe versucht zu ersetzenpage.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
auch mit Codes von unten (einzeln)
window.document.body.scrollTop = '1000';
location.href = ".has-more-items";
page.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
document.location.href=".has-more-items";
Aber nichts scheint zu funktionieren.