Como rolar para baixo com o Phantomjs para carregar o conteúdo dinâmico
Eu estou tentando raspar links de uma página que gera conteúdo dinamicamente como o usuário rolar para baixo para a parte inferior (rolagem infinita). Eu tentei fazer coisas diferentes com o Phantomjs, mas não consegui reunir links além da primeira página. Vamos dizer que o elemento na parte inferior que carrega o conteúdo tem classe.has-more-items
. Está disponível até que o conteúdo final seja carregado durante a rolagem e fique indisponível no DOM (display: none). Aqui estão as coisas que eu tentei
var page = require('webpage').create();
page.viewportSize = {width: 1600, height: 10000,};
Usandopage.scrollPosition = { top: 10000, left: 0 }
dentropage.open
mas não tem efeitopage.open('http://example.com/?q=houston', function(status) {
if (status == "success") {
page.scrollPosition = { top: 10000, left: 0 };
}
});
Também tentei colocá-lo dentropage.evaluate
função, mas isso dáErro de referência: não é possível encontrar a página da variável
Tentei usar jQuery e código JS dentropage.evaluate
epage.open
mas sem$ ("html, body"). animar ({scrollTop: $ (document) .height ()}, 10, function () {//console.log('check para execução ');});
como é e também dentrodocument.ready
. Da mesma forma para o código JS
window.scrollBy(0,10000)
como é e também dentrowindow.onload
Estou realmente impressionado por dois dias e não consigo encontrar um caminho. Qualquer ajuda ou sugestão seria apreciada.
Atualizar
Eu encontrei um pedaço de código útil emhttps://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;
}); }
Onde.has-more-items
é a classe de elemento que eu quero acessar, que está disponível inicialmente na parte inferior da página e, conforme rolamos para baixo, ela se move para baixo até que todos os dados sejam carregados e, em seguida, se tornem indisponíveis.
No entanto, quando eu testei, é claro que ele está correndo em loops infinitos sem rolar para baixo (eu renderizar fotos para verificar). Eu tentei substituirpage.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
com códigos de baixo também (um de cada vez)
window.document.body.scrollTop = '1000';
location.href = ".has-more-items";
page.scrollPosition = { top: page.scrollPosition + 1000, left: 0 };
document.location.href=".has-more-items";
Mas nada parece funcionar.