2012-02-28 5 views
49

phantomjs, config loadImage हैमैं किसी प्रकार के संसाधन को डाउनलोड करने के लिए फ़ैंटॉमजेएस को कैसे नियंत्रित कर सकता हूं?

लेकिन मैं और अधिक चाहते हैं,

मैं डाउनलोड संसाधन किसी तरह छोड़ phantomjs कैसे नियंत्रित कर सकते हैं,

ऐसे सीएसएस आदि के रूप में

...

== ===

अच्छी खबर: यह सुविधा जोड़ा गया है।

https://code.google.com/p/phantomjs/issues/detail?id=230

सार:

page.onResourceRequested = function(requestData, request) { 
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') { 
     console.log('The url of the request is matching. Aborting: ' + requestData['url']); 
     request.abort(); 
    } 
}; 
+0

मैं भी इस जानना चाहते हैं, कैसे phantomjs एक विशेष संसाधन – iwek

+3

अच्छी खबर छोड़ बनाने के लिए कर सकते हैं: इस सुविधा जोड़ा गया है। – atian25

+3

@ user2864740 इसे प्रश्न में क्यों संपादित करें और उत्तर के रूप में पोस्ट न करें? –

उत्तर

7

तो अंत में आप अन्यथा आप अभी भी PhantomJS

साथ नीचे दृष्टिकोण आसान तरीका कोशिश कर सकते हैं इस http://github.com/eugenehp/node-crawler

कोशिश कर सकते हैं, करने के लिए है लोड पेज -> पार्स पेज -> अवांछित संसाधन को छोड़ दें -> इसे PhatomJS में लोड करें।

एक और तरीका बस मेजबान को फ़ायरवॉल में अवरुद्ध कर रहा है।

वैकल्पिक रूप से आप कुछ यूआरएल पते और प्रश्नों को अवरुद्ध करने के लिए प्रॉक्सी का उपयोग कर सकते हैं।

और अतिरिक्त एक, पृष्ठ लोड करें, और फिर अवांछित संसाधनों को हटा दें, लेकिन मुझे लगता है कि यह सही दृष्टिकोण नहीं है।

+0

मुझे आश्चर्य है कि क्यों PhatomJS यह खुद नहीं है? कभी-कभी, हमें सीएसएस/आईएमजी के बिना बहुत सारे पेज लोड करने की ज़रूरत होती है, हाथ से अवांछित संसाधन को बाहर नहीं कर सकता – atian25

+0

पेजकंटेंट जैसी चीज है, आप रीजिक्स फ़िल्टर (सीएसएस, जेएस) का उपयोग करके किसी प्रकार के फ़िल्टरिंग संसाधनों के साथ इसे कुशल बना सकते हैं।)। या आप बस वेबपृष्ठ को क्रॉल कर सकते हैं और केवल उन्हीं छवियों को पार्स कर सकते हैं जिन्हें आप छोड़ना चाहते हैं। –

+0

उत्तर के लिए धन्यवाद। क्या आपका मतलब था कि फ़ैंटोमज द्वारा प्रदान किए गए कुछ फ़िल्टर इंटरफ़ेस/एपीआई हैं कि हम किसी प्रकार का संसाधन छोड़ सकते हैं?(अब इसे डाउनलोड न करें)। एपीआई नाम क्या है? – atian25

3

अब के लिए कोई रास्ता नहीं (phantomjs 1.7), यह इसका समर्थन नहीं करता है।

लेकिन एक बुरा समाधान एक HTTP प्रॉक्सी का प्रयोग है, तो आप, कुछ अनुरोध है कि आप

+0

बेशक यह सबसे अच्छा समाधान है, बीटीडब्ल्यू आपको हमेशा प्रॉक्सी (वार्निश या स्क्विड) आपके प्रोग्राम डाउनलोड करने के लिए "नियंत्रण" करने के लिए (क्यूइंग, कैशिंग इत्यादि जोड़ने के लिए ....) –

6

उपयोग page.onResourceRequested की जरूरत नहीं है बाहर स्क्रीन कर सकते हैं उदाहरण के loadurlwithoutcss.js में के रूप में:

page.onResourceRequested = function(requestData, request) { 
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || 
      requestData.headers['Content-Type'] == 'text/css') { 
     console.log('The url of the request is matching. Aborting: ' + requestData['url']); 
     request.abort(); 
    } 
}; 
14

UPDATED, कार्य !

फ़ैंटॉमजेएस 1.9 के बाद से, मौजूदा उत्तर काम नहीं करता था। आप इस कोड का उपयोग करना होगा: आप गर्भपात() के बजाय रद्द() का उपयोग करते हैं

var webPage = require('webpage'); 
var page = webPage.create(); 

page.onResourceRequested = function(requestData, networkRequest) { 
    var match = requestData.url.match(/wordfamily.js/g); 
    if (match != null) { 
    console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData)); 
    networkRequest.cancel(); // or .abort() 
    } 
}; 

, यह onResourceError ट्रिगर किया जाएगा।

आप look at the PhantomJS docs

+0

फ़ैंटोमज 2.1.1 कोई रद्द नहीं() बस निरस्त() – waza123

+0

@ waza123 वैसे भी काम करना चाहिए – webo80

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

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