2012-08-29 13 views
8

के साथ डोम मैनिपुलेशन मैं मनमाने ढंग से यूआरएल से स्क्रीनशॉट बनाने के लिए फ़ैंटॉमजेएस का उपयोग कर रहा हूं। स्क्रीनशॉट लेने से पहले, मैं सभी ड्रॉप-डाउन मेनू को हटाने के लिए पृष्ठ डीओएम में हेरफेर करना चाहता हूं, क्योंकि फ़ैंटॉमजेएस उन्हें पृष्ठ के शीर्ष बाएं कोने में गलत तरीके से प्रस्तुत करता है (एक ज्ञात प्रेत issue।)फ़ैंटॉमजेएस

मेरे पास सरल डीओएम स्क्रिप्ट के साथ ऐसा करने के लिए:

var selects = document.getElementsByTagName('select'); 

    for (var i=0; i < selects.length; i++) { 
     document.getElementsByTagName('select')[i].style.visibility="hidden"; 
    } 

यह परीक्षण किया गया है और स्टैंडअलोन जावास्क्रिप्ट के रूप में ठीक काम करता है। हालांकि यह PhantomJS कोड के अंदर काम नहीं करता मैं स्क्रीनशॉट इकट्ठा करने के लिए उपयोग कर रहा हूँ (पिछले दिखाया भाग):

page.open(address, function (status) { 

    if (status !== 'success') { 
     console.log('Unable to load the address!'); 
    } else { 
     window.setTimeout(function() { 

      var selects = document.getElementsByTagName('select'); 

      for (var i=0; i < selects.length; i++) { 
       document.getElementsByTagName('select')[i].style.visibility="hidden"; 
      } 

      page.render(output); 

      phantom.exit(); 

     }, 200); 
    } 
}); 

कुछ पृष्ठों को अभी भी गलत जगह पर एक का चयन करें बॉक्स के साथ प्रदान कर रहे हैं। मैं मूल PhantomJS प्रतिपादन बग को हल करने या डीओएम में ड्रॉप-डाउन मेनू को छिपाने में मदद की सराहना करता हूं। धन्यवाद।

उत्तर

11

इसे सही संदर्भ में चलाएं, यानी page.evaluate के साथ पृष्ठ के अंदर। कई examples included with PhantomJS हैं जो इसे प्रदर्शित करते हैं, उदा। useragent.js

+5

लिंक मर चुका है –

2

यह कोड काम नहीं करता है? मैंने प्रदर्शन को बेहतर बनाने के लिए डीओएम के तत्वों को दोबारा चयन करने के बजाय लूप के लिए अपने कैश किए गए चयन चर का उपयोग किया।

var selects = document.getElementsByTagName('select'); 
for (var i=0; i < selects.length; i++) { 
    selects[i].style.visibility="hidden"; 
} 
संबंधित मुद्दे