XLS letöltés node.js nightmare-rel felugró ablak nélkül
2017-11-01T19:11:36+01:00
2017-11-03T14:35:29+01:00
2022-08-10T20:45:33+02:00
gyendresz
Feladat: Egy adott oldalról megfelelő dátumú xls letöltése és egy php indítása a letöltött adatokkal.

Az alábbi kód hol működik, hol nem.

//http://localhost:8080/?prg=hupx&v_date=2017-10-08&url1=2017.10.08&file=hupx_2017_10_08.xls //http://localhost:8080/?prg=exit var fs = require("fs"); var path = require("path"); var Nightmare = require("nightmare"); var request = require("request"); var http = require('http'); var url = require('url'); var saveType="HTMLComplete"; //HTMLOnly,MHTML,HTMLComplete var tmp_path="c:/xampp/htdocs/tmp/"; var html_file=tmp_path+"hupx.html"; console.log(__dirname); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var q = url.parse(req.url, true).query; switch(q.prg) { case "hupx": console.log(q.prg+" "+q.v_date+" "+q.url1+" "+q.file); var txt = q.prg+" ; "+q.v_date+" ; "+q.url1+" "+q.file; var w_screen=tmp_path+"scr"+q.v_date+".png"; var nightmare = Nightmare(); require('nightmare-download-manager')(Nightmare); var w_url = "https://www.hupx.hu/hu/Lapok/hupx.aspx?remsession=1"; nightmare.on('download', function(state, downloadItem) { if(state == 'started') { nightmare.emit('download', 'yourfilename.xls', downloadItem); } else if(state == 'completed') { console.log('Donwload completed'); } else if(state == 'interrupted') { console.log('Donwload interrupted'); endNightmare(); } else if(state == 'cancelled') { console.log('Donwload cancelled'); endNightmare(); } }); var w_date='\u007F\u007F\u007F\u007F\u007F\u007F\u007F\u007F\u007F\u007F\u007F'+q.url1+'\u000A\u000D'; nightmare .goto(w_url) .wait(10000) .click("#ctl00_SPWebPartManager1_g_2914f71f_74a3_4716_afa7_eea3c374ad87_ctl00_btnreport_5") .wait(20000) .type("#ctl00_SPWebPartManager1_g_2914f71f_74a3_4716_afa7_eea3c374ad87_ctl00_BottomContentCalendarBox1", w_date) .wait(29000) .viewport(600, 10) .screenshot(w_screen) .html(html_file, saveType) .downloadManager() .click("#ctl00_SPWebPartManager1_g_2914f71f_74a3_4716_afa7_eea3c374ad87_ctl00_DownloadLinkCollection_XLS") .waitDownloadsComplete() .then(() => { console.log('done'); w_url ="http://localhost/"+q.prg+".php?v_date="+q.v_date+"&file=tmp/"+q.file; request({ uri: w_url, method: "GET", }, function(error, response, body) { console.log(body); }); }); break; case "test": var txt='TEST' console.log(txt); } res.end(txt); if(q.prg=="exit"){ console.log(txt); process.exit(1); } }).listen(8080);
Általában odáig eljut, hogy az adott dátumú oldal képét letölti.
Az már ritkábban jön össze, hogy a letöltő ablak feljön és kattintva lementi nem olyan néven és nem oda ahová szeretném, majd hosszú hatásszünet.
Nagy ritkán és nagy sokára  végigfut , a kívánt helyen és néven is megjelenik az xls és akkor a php is elindul.
Megreparálható hogy biztosabban fusson (mondjuk 10 ből 8 siker, vagy az túlzott elvárás)?
Esetleg valami biztosabb környezet?

Üdv: EGY
Mutasd a teljes hozzászólást!
Nagyon belebonyolódtál a nodejs-be.
A http createserver handle függvénye egy kőkemény async függvény.
Minden hívásra, minden get-re put-ra lefut.
Ezen belül egy nightmare() hívás szerintem visszaadja az egyetlen instance-odat, ami félbehagy minden le nem futott feladatot.
Nem vagyok benne teljesen biztos, csak tippelek.

Ps.:Ha azt látod, hogy több böngésző ablak is fut egyszerre, akkor tévedtem.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd