Я новичок в PhantomJS и пытаюсь захватить домашнюю страницу Trade Me. Вот мой код до сих пор:Захват страницы после асинхронной загрузки содержимого
var page = require('webpage').create();
page.open('http://trademe.co.nz', function() {
// Checks for bottom div and scrolls down from time to time
window.setInterval(function() {
// Checks if there is a div with class=".has-more-items"
// (not sure if this is the best way of doing it)
// var count = page.content.match(/class=".site-footer"/g);
var footer_visible = page.evaluate(function() {
return $('.site-footer').is(':visible');
});
if(!footer_visible) { // Didn't find
console.log('Scrolling');
page.evaluate(function() {
// Scrolls to the bottom of page
window.document.body.scrollTop = document.body.scrollHeight;
});
}
else { // Found
console.log('Found');
// Do what you want
window.setTimeout(function() {
console.log('Capturing');
page.render('phantom-capture.png', {format: 'png'});
phantom.exit();
}, 10000);
}
}, 1000); // Number of milliseconds to wait between scrolls
});
Есть несколько вещей, которые дефлектор меня:
- Слово
Scrolling
никогда не печатается. - В конечном итоге доходит до
Found
, и слово напечатано 10 раз. Я предполагаю, что это потому, что он содержится в блокеsetInterval
с интервалом в 1 секунду, и есть 10-секундное ожидание, вызванноеsetTimeout
? - Страница, наконец, отображается в PNG-файле, но содержимое этих асинхронно загруженных панелей по-прежнему пуст и отображается сообщение
Loading...
.
Я новичок во всем этом, и мои знания Javascript очень ржавые.
Хорошая идея по проверке элементов 'carousel-loading-card'! –