2011-09-23 25 views
10

में कनवर्ट करने के लिए प्रेत जेएस का उपयोग करना मैंने विंडोज पर फैंटॉम जेएस का उपयोग करना शुरू कर दिया है, लेकिन मुझे इसकी क्षमता (शायद मेरी समस्या की जड़) पर दस्तावेज़ीकरण खोजने में कुछ कठिनाई हो रही है।सभी एचटीएमएल फाइलों को पीएनजी

प्रेत जे एस का उपयोग मैं निम्नलिखित करना चाहते हैं:

  1. यह एक स्थानीय मशीन फ़ोल्डर स्थान दें,
  2. , यह उस स्थान पर नेविगेट और HTML फ़ाइलों की सूची की पहचान है
  3. एक बार उस सूची को HTML फ़ाइलों की सूची के लूप में पहचाना जाता है और उन्हें सभी को पीएनजी में परिवर्तित किया जाता है (जिस तरह से rasterize.js उदाहरण काम करता है), जहां फ़ाइल नाम "पीएनजी" के साथ "HTML" gsubs है।

मुझे यकीन है कि यह शायद संभव है हूँ, लेकिन मैं के लिए प्रेत जे एस समारोह कॉल को खोजने के लिए सक्षम नहीं था:

  1. और एक फ़ोल्डर में फ़ाइलों की सूची
  2. प्रारूप हो रही प्रेत जेएस में gsub और grep के लिए।

उत्तर

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++; 
} 

आशा इस helps। FileSystem कॉल के बारे में अधिक जानकारी के लिए इस पेज की जाँच: http://phantomjs.org/api/fs/

इसके अलावा, मैं जोड़ना चाहते थे, मुझे विश्वास है कि FileSystem कार्यों PhantomJS 1.3 या बाद में ही उपलब्ध हैं। कृपया latest संस्करण चलाने के लिए सुनिश्चित करें। मैंने विंडोज के लिए PyPhantomJS का उपयोग किया लेकिन मुझे यकीन है कि यह अन्य सिस्टम पर भीड़ के बिना काम करेगा।

+0

किसी भी तरह से मुझे आपकी स्क्रिप्ट के साथ केवल खाली 'पीएनजी' मिलता है। 'Console.log (page.content) जोड़ना;' पृष्ठ में। ऑनलोड लोड किया गया 'रिटर्न ' कोई फर्क नहीं पड़ता कि असली HTML सामग्री है ... कोई सुझाव? Phantomjs v1.9.2 – AvL

+0

क्या आप सुनिश्चित हैं कि स्नैपशॉट लेने का प्रयास करने से पहले आपके पृष्ठ पूरी तरह से लोड हो रहे हैं? –

+0

मैंने 'स्थिति' के लिए भी जांच की। मेरा प्रश्न देखें: http://stackoverflow.com/questions/19939046/phantomjs-fails-to-open-local-file – AvL

संबंधित मुद्दे