Не уверен, что я делаю неправильно. При запуске этого в PhantomJS он просто зависает без ответа. Он также не показывает мои сообщения консоли.Цитирование через идентификаторы элементов для создания скриншотов с помощью PhantomJS
У меня есть сайт, который имеет секционные блоки, определенные в тегах div (templatemo_content). Эти теги div содержат один и тот же идентификатор. То, что я пытаюсь выполнить, - это пропустить веб-сайт, найти все id id templatemo_content и сгенерировать скриншоты каждого блока templatemo_content div.
var page = require('webpage').create();
page.open('myWebpage', function() {
page.onConsoleMessage = function (msg) { console.log(msg); };
page.viewportSize = { width:1100, height:800 };
console.log('open');
window.setTimeout(function() {
var clipRects = page.evaluate(function(){
return = document.querySelectorAll('#templatemo_content');//.getBoundingClientRect();
});
console.log('clipRect size = ' + clipRects.length);
for(var i = 0; i < clipRects.length; ++i) {
if (clipRects[i]) {
console.log('element found');
var clipRect = clipRects[i].getBoundingClientRect();
page.clipRect = {
top: clipRect.top,
left: clipRect.left,
width: clipRect.width,
height: clipRect.height
};
page.render('google.png');
}
}
phantom.exit();
}, 3000); // Change timeout as required to allow sufficient time
});
Снова это зависает не с журналов с консоли. Если я удаляю цикл for и изменяю querySelectorAll на querySelector, то он работает для одного из тегов div.
Любая помощь будет отличной.
Отправной точкой будет понимание того, что querySelectorAll возвращает NodeList (не массив). Преобразуйте нодэлист в массив: http://stackoverflow.com/a/18129752/1670474. – dannypaz
Также вы переписываете и визуализируете page.clipRect и page.render на каждой итерации цикла, что тоже может быть проблемой. – dannypaz