PhantomJs клик по ссылкам в цикле

277
27 декабря 2017, 22:41

Вот такая функция делает клик по ссылке и потом сохраняет скрин страницы

function getInfoUsers(page, peers) {
    var element;
    page.evaluate(
       function() {
          function mouseclick(element) {
            var event = document.createEvent('MouseEvents');
            event.initMouseEvent('click', true, true, window, 1, 0, 0);
            element.dispatchEvent(event);
        }
        element = $("a.md_modal_list_peer_name")[10];
        console.log("User: " + element.outerText);
        mouseclick(element);
    });
    window.setTimeout(
       function () {
           page.render("1111.png");
           phantom.exit();
       }, 8000
    );
}

ссылок на исходной странице 10 штук, при клике на ссылку появляется всплывающее окно, из которого нужно получить инфу и только потом сделать клик по следующей ссылке. Для начала пытаюсь хотя бы получить скрины всех этих окон.

Пробовал делать в цикле, но цикл пробегает быстрее чем успевает загрузить хотя бы одно окно.

Answer 1

Предлагаю следующий алгоритм

// если я правильно понял, есть какая-то входная 
// страница, с которой нужно рекурсивно собрать 
// все ссылки. Путь это будет она 
var enterPage = 'http://somesite.ru'; 
 
// Далее предлагаю выбрать все ссылки с этой страницы 
var enterPageLinks = []; 
 
// затем нам нужна функция которая будет вызываться 
// для обработки каждой ссылки 
function openPage(url, callback) { 
  // открываем полученный url и вызываем callback, 
  // когда, вероятнее всего, страница уже будет загружена 
  setTimeout(callback, 8000); 
} 
 
// и функция, которая будет делать снимки страниц 
function capturePage(callback) { 
  // делаем снимок страницы и когда закончим, нужно 
  // будет вызвать callback 
  callback(); 
} 
 
// данная функция будет вызывать обработку каждой 
// следующей страницы 
function nextPage() { 
  // пока в массиве есть ссылки 
  if (enterPageLinks.length) { 
    // вырезаем из массива первую ссылку 
    var link = enterPageLinks.shift(); 
     
    // открываем её 
    openPage(link, function(){ 
      // когда страница будет действительно открыта 
      // мы делаем снимок 
      capturePage(function(){ 
        // а когда снимок будет сделан, будет вызвана 
        // следующая итерация и так до тех пор, пока 
        // не будут обработаны все ссылки 
        nextPage(); 
      }); 
       
       
    }); 
  } else { 
    // обработка ссылок закончена 
  } 
} 
 
// здесь окрываем входную страницу и выбираем из неё 
// все ссылки, которые подлежат обработке и складываем 
// их в массив enterPageLinks 
 
// затем запускаем первый цикл итерации 
nextPage();

READ ALSO
Как запустить функцию в callback magnific popup?

Как запустить функцию в callback magnific popup?

На форме есть чекбокс, чек которого снимает disable с кнопкиЕсли форма вызывается по ajax (используется magnific popup), код не работает

366
Как получить стиль по классу в SVG?

Как получить стиль по классу в SVG?

Испробовал много разных способов получения стиля, в первую очередь пытался использовать getComputedStyle(), но это не помогает, вот допустим есть...

318