2011-09-23 10 views
10

Windows üzerinde Phantom JS'yi kullanmaya başladım, ancak kabiliyetiyle ilgili bir belge bulmakta güçlük çekiyorum (muhtemelen benim sorunumun kökü). Ben aşağıdakileri yapmak istiyorum Fantom JS kullanarakBir klasördeki tüm HTML dosyalarını PNG'ye dönüştürmek için Phantom JS'yi kullanma

:

  1. it a yerel makine klasör konumunu verin,
  2. , bu konuma gitmek ve HTML dosyaların listesini belirlemesi
  3. kez Bu liste, HTML dosyaları listesinin döngüsüyle tanımlanır ve hepsini PNG'ye dönüştürür (rasterize.js örneğinin çalışmasına benzer şekilde), burada dosya adı "PNG" ile "HTML" ifadesini gsub yapar.

bunun muhtemelen mümkün olduğundan emin değilim, ama için Phantom JS işlev çağrısını bulmak mümkün değildi: Bir klasördeki dosyaların listesini ve

  • biçimini alma

    1. Phantom JS'de gsub ve grep için.
  • cevap

    18
    var page = require('webpage').create(), loadInProgress = false, fs = require('fs'); 
    var htmlFiles = new Array(); 
    console.log(fs.workingDirectory); 
    var curdir = fs.list(fs.workingDirectory); 
    
    // loop through files and folders 
    for(var i = 0; i< curdir.length; i++) 
    { 
        var fullpath = fs.workingDirectory + fs.separator + curdir[i]; 
        // check if item is a file 
        if(fs.isFile(fullpath)) 
        { 
         // check that file is html 
         if(fullpath.indexOf('.html') != -1) 
         { 
          // show full path of file 
          console.log('File path: ' + fullpath); 
          htmlFiles.push(fullpath); 
         } 
        } 
    } 
    
    console.log('Number of Html Files: ' + htmlFiles.length); 
    
    // output pages as PNG 
    var pageindex = 0; 
    
    var interval = setInterval(function() { 
        if (!loadInProgress && pageindex < htmlFiles.length) { 
         console.log("image " + (pageindex + 1)); 
         page.open(htmlFiles[pageindex]); 
        } 
        if (pageindex == htmlFiles.length) { 
         console.log("image render complete!"); 
         phantom.exit(); 
        } 
    }, 250); 
    
    page.onLoadStarted = function() { 
        loadInProgress = true; 
        console.log('page ' + (pageindex + 1) + ' load started'); 
    }; 
    
    page.onLoadFinished = function() { 
        loadInProgress = false; 
        page.render("images/output" + (pageindex + 1) + ".png"); 
        console.log('page ' + (pageindex + 1) + ' load finished'); 
        pageindex++; 
    } 
    

    Umut bu helps. FileSystem çağrıları hakkında daha fazla bilgi için şu sayfayı ziyaret edin: http://phantomjs.org/api/fs/

    Ayrıca, FileSystem işlevlerinin yalnızca PhantomJS 1.3 veya sonraki sürümlerinde kullanılabileceğine inanıyorum. Lütfen latest sürümünü çalıştırdığınızdan emin olun. Windows için PyPhantomJS kullandım ama eminim ki bu diğer sistemlerde de bir aksama olmadan çalışacaktır.

    +0

    Her nasılsa, sadece komut dosyanızla boş PNG'ler alıyorum. ... 'in' page.onLoadFinished' '' olursa olsun gerçek HTML içeriğinin istiyorum döndüren herhangi öneriniz; 'console.log (page.content) ekleme? Phantomjs v1.9.2 – AvL

    +0

    Anlık fotoğraf çekmeye başlamadan önce sayfalarınızın tam olarak yüklendiğinden emin misiniz? –

    +0

    Ben de durum için kontrol ettim. Soruma bakın: http://stackoverflow.com/questions/19939046/phantomjs-fails-to-open-local-file – AvL

    İlgili konular