|
как с помощью phantomjs пройти по ссылкам
Как с помощью phantomjs обойти массив ссылко, от код и не работает???
var webpage=require('webpage'); var url=[]; url[0]="http://google.ru"; url[1]="http://microsoft.com"; var page=webpage.create(); for(var i=0;i<url.length;i++) { console.log(url[i]); page.open(url[i],function(status){ if(status==="success"){ console.log("success"+i); page.render("img"+i+".png"); }else { console.log("not success"+i); } }); } //phantom.exit(); |
Так что никто не знает как делать? Я знаю можно черзе таймер и switch, но мне хочется через цикл по простому сделать. Как сделать так чтобы цикл ожидал завершения работы функции page.open, а затем только шел дальше?????
|
Так что через таймеры делать? Похоже вариантов нету. Или можно как то сделать чтобы функция open не возвращала управление сразу, а только после выполнения????
|
Суть событийного программирования, состоит в построении цепочек из callback функций.
На вскидку: url[0]="http://google.ru"; url[1]="http://microsoft.com"; i = 0; function parse(i) { page.open(url[i], function() { ... ... ... i++ if(url[i]) parse(i); }); } Конечно можно и покрасивее это сделать. |
Цитата:
|
Максимальная глубина рекурсии в браузерах ограничена, точно можно рассчитывать на 10000 вложенных вызовов, но некоторые интерпретаторы допускают и больше.
https://learn.javascript.ru/recursion |
вообе кумарит это phantom, похоже нужно еще и задержку делать после выхода из функции open, если не делать задержку то оно с ошибками парсит или я что то не то делаю хз.
|
Цитата:
|
Вот код написал
var webpage=require('webpage'); var url=[]; url[0]="http://google.ru"; url[1]="http://microsoft.com"; url[2]="http://kselax.ru"; url[3]="http://cyberforum.ru"; url[4]="http://fl.ru"; url[5]="http://podrobnosti.ua"; var page=webpage.create(); //устанавливаем 10 секунд ожидания запроса page.settings.onResourceTimeout=500; var step=1; var time=500; var intervalId=setInterval(tick,time); var i=0; function tick(){ switch(step){ case 1:{ clearInterval(intervalId);//останавливаем счетчик step=2; console.log(url[i]); page.settings.resourceTimeout=15000;//время ожидания 15 секунд page.open(url[i],function(status){ if(status==="success"){ console.log("success"+i); page.render("img"+i+".png"); i++; if(i<url.length) { // clearInterval(intervalId); // intervalId=setInterval(tick,time); step=1; } else step=3; } else{ console.log("not success"+i); i++; if(i<url.length) { // clearInterval(intervalId); // intervalId=setInterval(tick,time); step = 1; } else step=3; } }); intervalId=setInterval(tick,time); break; } case 2:{ console.log("TICK"+step); break; } case 3:{ clearInterval(intervalId); phantom.exit(); } } } Он у меня два раза копирует одни и теже изображения, а когда раскоменнтирую строки переустановки счетчика тогда нормально. Че так? Че он неуспевает обнулятся или че за нафиг? На нем большие парсера можно написать или нет?, Это ужас постоянно таймеры запускать :( Щас и с задержкой половина урлов не спарсило, мб. большую нужно поставить, 500 вроде мало, когда ставил 1000 то норм было. Как он работает не ясно.... Через раз парсит, раз норм все урлы, а другой раз пару урлов. |
от так сделал тоже через раз копирует изображения и бывают одинаковые. хз. че оно так лагает
var webpage=require("webpage"); var page=webpage.create(); var url=[]; url[0]="http://google.ru"; url[1]="http://microsoft.com"; url[2]="http://kselax.ru"; url[3]="http://cyberforum.ru"; url[4]="http://fl.ru"; url[5]="http://podrobnosti.ua"; var i=0; pars(); function pars(){ page.settings.resourceTimeout=10000; page.open(url[i],function(status){ if(status=="success"){ console.log("success"+i) page.render("img"+i+".png"); if(++i<url.length){pars();} else{phantom.exit();} } else{ console.log("not success"+i) if(++i<url.length){pars();} else{phantom.exit();} } }); }; Мб. что то в коде не так, нужно мб. как то phantomjs останавливать или что то делать???? |
Часовой пояс GMT +3, время: 01:23. |
|