2013-04-06 10 views
9

पर डेटा पास कर रहा है exec() कमांड का उपयोग कर PHP द्वारा कैस्परजेएस को कॉल किया जा रहा है। कैस्परजेएस के काम के बाद वेबपेज के हिस्सों को पुनः प्राप्त करने के बाद, पुनर्प्राप्त डेटा को PHP पर वापस कैसे किया जा सकता है?कैस्परजेएस पीएचपी

उत्तर

8

आप आउटपुट को stdout से सरणी में रीडायरेक्ट कर सकते हैं।

this पृष्ठ पर यह कहते हैं कि आप कर सकते हैं:

string exec (string $command [, array &$output [, int &$return_var ]]) 

यह पर चला जाता है कहने के लिए:

तो उत्पादन तर्क, मौजूद है तो निर्दिष्ट सरणी के हर लाइन के साथ भरा जाएगा आदेश से आउटपुट।

तो मूल रूप से आप निष्पादन कर सकते हैं ('casperjs कमांड, $ array_here);

24

मैं इस तरह के रूप पीएचपी एक सेवा के रूप CasperJS स्क्रिप्ट चल रही है किसी अन्य भाषा में CasperJS से डेटा स्थानांतरित करने के लिए सबसे अच्छा तरीका लगता है। क्योंकि CasperJS PhantomJS से अधिक लिखा गया है, CasperJS PhantomJS का एक एम्बेडेड वेब सर्वर मॉड्यूल नेवला कहा जाता है का उपयोग कर सकते हैं।

कैसे एम्बेडेड वेब सर्वर काम करता है के बारे में जानकारी के लिए

here

यहाँ कैसे एक CasperJS स्क्रिप्ट एक वेब सर्वर शुरू कर सकते हैं के बारे में एक उदाहरण देखें।

//define ip and port to web service 
var ip_server = '127.0.0.1:8585'; 

//includes web server modules 
var server = require('webserver').create(); 

//start web server 
var service = server.listen(ip_server, function(request, response) { 

    var links = []; 
    var casper = require('casper').create(); 

    function getLinks() { 
     var links = document.querySelectorAll('h3.r a'); 
     return Array.prototype.map.call(links, function(e) { 
      return e.getAttribute('href') 
     }); 
    } 

    casper.start('http://google.fr/', function() { 
     // search for 'casperjs' from google form 
     this.fill('form[action="/search"]', { q: 'casperjs' }, true); 
    }); 

    casper.then(function() { 
     // aggregate results for the 'casperjs' search 
     links = this.evaluate(getLinks); 
     // now search for 'phantomjs' by filling the form again 
     this.fill('form[action="/search"]', { q: 'phantomjs' }, true); 
    }); 

    casper.then(function() { 
     // aggregate results for the 'phantomjs' search 
     links = links.concat(this.evaluate(getLinks)); 
    }); 

    // 
    casper.run(function() { 
      response.statusCode = 200; 
      //sends results as JSON object 
      response.write(JSON.stringify(links, null, null)); 
      response.close();    
    }); 

}); 
console.log('Server running at http://' + ip_server+'/'); 
+8

जबकि मैं मानता हूँ कि इस सिद्धांत में एक अच्छी तकनीक, अभ्यास कैस्पर में phantomjs संसाधनों को मुक्त नहीं करता है, वहाँ रैखिक प्रत्येक अनुरोध के साथ स्मृति उपयोग में वृद्धि प्रतीत होता है। मैं '' casper.clear जोड़ने 'की कोशिश की है()' '' और यहां तक ​​कि स्पष्ट हैकिंग() के लिए '' 'फोन this.page.close()' '' (भीतर से साफ()) पेज। जबकि कॉलिंग बंद करने में मदद मिलती है इससे समस्या हल नहीं होती है। – danmux

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