Jak przewijać w dół Phantomjs, aby załadować dynamiczną zawartość
Próbuję zeskrobać linki ze strony, która generuje zawartość dynamicznie, gdy użytkownik przewija w dół (przewijanie nieskończone). Próbowałem robić różne rzeczy z Phantomjs, ale nie jestem w stanie zebrać linków poza pierwszą stroną. Powiedzmy, że element na dole, który ładuje zawartość, ma klasę.has-more-items
. Jest dostępny do momentu załadowania ostatecznej treści podczas przewijania, a następnie staje się niedostępny w DOM (wyświetlacz: brak). Oto rzeczy, które próbowałem -
var page = require('webpage').create();
page.viewportSize = {szerokość: 1600, wysokość: 10000,};
Za pomocąpage.scrollPosition = { top: 10000, left: 0 }
wewnątrzpage.open
ale nie działają jak-page.open('http://example.com/?q=houston', function(status) {
if (status == "success") {
page.scrollPosition = { top: 10000, left: 0 };
}
});
Próbowałem też umieścić go w środkupage.evaluate
funkcja, ale to dajeBłąd odniesienia: Nie można znaleźć strony zmiennej
Próbowałem użyć jQuery i kodu JS wewnątrzpage.evaluate
ipage.open
ale bez skutku-$ ("html, body"). animate ({scrollTop: $ (document) .height ()}, 10, function () {//console.log('check dla wykonania ”);});
tak jak jest i wewnątrzdocument.ready
. Podobnie dla kodu JS-
window.scrollBy(0,10000)
tak jak jest i wewnątrzwindow.onload
Jestem naprawdę pod wrażeniem przez 2 dni i nie mogę znaleźć sposobu. Każda pomoc lub podpowiedź byłaby doceniana.
Aktualizacja
Znalazłem pomocny fragment kodu whttps://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;
}); }
Gdzie.has-more-items
jest klasą elementu, do której chcę uzyskać dostęp, która jest początkowo dostępna na dole strony, a kiedy przewijamy w dół, przesuwa się w dół, aż wszystkie dane zostaną załadowane, a następnie stają się niedostępne.
Jednak kiedy testowałem, jest jasne, że działa w nieskończonych pętlach bez przewijania w dół (renderuję zdjęcia do sprawdzenia). Próbowałem wymienićpage.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
z kodami od dołu (po jednym na raz)
window.document.body.scrollTop = '1000';
location.href = ".has-more-items";
page.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
document.location.href=".has-more-items";
Ale nic nie działa.