Цитата:
|
i=0 tst=function(){i++; try{tst()}catch(e){console.log(i)}} tst() i=0 tst=function(){if(i===30000) return console.log(i); i++; setTimeout(function(){tst()})} tst() /* результат для ноды: 11434 30000 */ скорей всего для асинхронных вызовов нет ограничений. Но они медленней. UPD хотя на хроме этот код не отрабатывает почему-то, вывода в консоль нет. В ФФ -- ок |
хром 40к без Timeout стек переполнен !
function f (i) { console.log(1) if(i > 0) setTimeout(function () {f(i-1)}, 0); else console.log(i) } f(40000) |
а как вообще парсера пишутся на phantomjs???? Мб. просто маленькие скрипты посоздавать которые будут по одному урлу считывать, а затем создавать процесс и вызывать консоль со скриптом???
А если так сделать, то куки пропадут да? Массив из 5 ссылок нормально спарсить не могу даже. |
можно пошаманить и обойти стек :)
function f (i, t) { if(t == 10000) { setTimeout(function () { console.log(i) f(i, 0) }, 0); } else if(i) f(i-1, t+1); } var a = 100000; f(a, 0) |
|
Цитата:
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 i=0; pars(); function pars(){ var page=webpage.create(); page.settings.resourceTimeout=10000; page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0'; page.open(url[i],function(status){ if(status=="success"){ console.log("success"+i) page.render("img"+i+".png"); page.close(); if(++i<url.length){pars();} else{phantom.exit();} } else{ console.log("not success"+i) page.close(); if(++i<url.length){pars();} else{phantom.exit();} } }); }; А раньше по разному парсило, то 2 страницы, то 3, то урлы разные, а изображения одинаковые, вроде разобрался. Вот с помощью switch типо отлова сообщений 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 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]); var page=webpage.create(); page.settings.resourceTimeout=15000;//время ожидания 15 секунд page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0'; page.open(url[i],function(status){ if(status==="success"){ console.log("success"+i); page.render("img"+i+".png"); page.close(); i++; if(i<url.length) {step=1;} else step=3; } else{ page.close(); console.log("not success"+i); i++; if(i<url.length) {step = 1;} else step=3; } }); intervalId=setInterval(tick,time); break; } case 2:{ console.log("TICK"+step); break; } case 3:{ clearInterval(intervalId); phantom.exit(); } } } А от большие парсера походу не сильно удобно будет писать??? Наверно лучше делать с помощью switch чем на функции разбивать. А мб. еще есть какой то лучший способ????? Еще интересно как phantom куки сохраняет, от если я сделаю авторизацию через phantom , потом его закрой и заново открою то я буду авторизован или нет??? Нада проверить. И изображения не ясно как их копировать. От есть урл на изображение http://hsto.org/files/59f/f05/718/59...e54ea5e2b3.png и как его скопировать через phantom? просто загрузить и сохранить? Щас проверю. Хочу попробовать большой парсер написать типо товары напарсить для интернет магазина, я такой на curl писал, а тут не ясно как делать. И как прокси поменять не ясно :) |
никак изображение нимогу сохранитЬ, есть изображение http://hsto.org/files/59f/f05/718/59...e54ea5e2b3.png, загружаю его в браузер и дальше что?
вот код, загружаю страницу и сразу ошибка вылазит var webpage=require('webpage'); //var fs=require('fs'); var url="http://hsto.org/files/59f/f05/718/59ff0571875a45e79162ebe54ea5e2b3.png"; var page=webpage.create(); page.open(url,function(status){ if(status==="success"){ // page.render("img.png"); // console.log(page.content); // fs.write("img1.png",page.content,"w"); phantom.exit(); } else{ phantom.exit(); } }); Ошибка: E:\project_web\porject2>phantomjs test5.js PhantomJS has crashed. Please read the crash reporting guide at <http://phantomjs.org/crash-reporting.html> and file a bug report at <https://github.com/ariya/phantomjs/issues/new>. Please attach the crash dump file: C:\TEMP\28edde00-9364-4e54-ae01-4cb6df7a9cc8.dmp Если раскоментировать строки, то в img.png изображение но маленькое, а в img1.png испорченое изображение. Нужно как то загрузить, а как хз. Мб. как то можно изображение загрузить по ссылке с помощью просто javaScript без phantomjs???? |
Так что никто не знает как сохранить изображение спомощью javaScript???? Есть ссылка на img, нужно как то его сохранить, все ж просто :)
|
ninja2,
Это не рекурсия, разница в том, что функция выполняется асинхронно. Про сохранение изображений, глянь там есть папка examples, в ней есть похожие примеры. |
Часовой пояс GMT +3, время: 09:07. |