2015-11-11 8 views
5

मैं का उपयोग कर कोड निम्नलिखित चल Nightmare.js:दुःस्वप्न जे एस का मूल्यांकन पेज

var test = new Nightmare() 
    .viewport(1000, 1000) 
    .useragent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36") 
    .goto('https://en.wikipedia.org/wiki/Ubuntu') 
    .inject('js', 'jquery.js') 
    .wait(500) 
    .screenshot('page.png') 
    .evaluate(
     function() 
     { 
      return $('h1.firstHeading').text(); //Get Heading 
     }, 
     function (value) 
     { 
      console.log("Not in page context"); 
     } 
    ) 
    .run(
     function (err, nightmare) 
      { 
       if (err) return console.log(err); 
       console.log('Done!'); 
      } 
     ); 

पृष्ठ लोड होता है और स्क्रीनशॉट, page.png, सही ढंग से लिया जाता है, लेकिन का मूल्यांकन कॉलबैक संदेश के बाद से निष्पादित हो जाता है कभी नहीं "पृष्ठ संदर्भ में नहीं" कभी मुद्रित नहीं होता है। Jquery.js स्क्रिप्ट के समान फ़ोल्डर में है और इसे सफलतापूर्वक इंजेक्शन दिया जाता है, क्योंकि अगर मैं इंजेक्शनजेएस I को हटाता हूं तो यह संकेत मिलता है कि $ परिभाषित नहीं किया गया है। मैं h1.firstHeading चयनकर्ता की टेक्स्ट सामग्री प्राप्त करना चाहता हूं।

मूल्यांकन कॉलबैक क्यों निष्पादित नहीं किया जाता है।

+0

'.evaluate 'ब्राउज़र के संदर्भ के तहत चलाने के लिए है नोड के संदर्भ में नहीं, यही कारण है कि आप इसे आउटपुट नहीं देखते हैं। @ आदित्य के रूप में, आपने बताया कि आप ब्राउजर संदर्भ से मूल्यों को नोड के संदर्भ में वापस कर सकते हैं और इसे इस तरह से जांच सकते हैं। – shriek

उत्तर

7

प्रमुख मुद्दा इस तथ्य के साथ है कि console.logevaluate() में काम नहीं करता है।

मूल्यांकन केवल कॉलबैक में डेटा वापस करने के लिए ज़िम्मेदार है।

वर्तमान में मूल्यांकन फ़ंक्शन .evaluate(fn, args1, args2) प्रारूप का पालन करता है। इसलिए, आपके मामले में, जबकि आपका पहला फ़ंक्शन डेटा लौटाएगा, अगला वाला नहीं होगा।

यदि आप चाहते हैं कि शीर्षक केवल फ़ंक्शन से मूल्य वापस कर दें और रन फ़ंक्शन के अंदर एक console.log (दुःस्वप्न) करें।

नीचे नमूना कोड परिवर्तनों को खोजने करें:

.evaluate(
    function() 
    { 
     if($('h1.firstHeading').text()) 
      return $('h1.firstHeading').text(); //Get Heading 
     else 
      return "Not in page context"; 
    } 
) 
.run(
    function (err, nightmare) 
    { 
     if (err) return console.log(err); 
     console.log(nightmare); 
     console.log('Done!'); 
    } 
); 

आशा इस मदद करता है।! धन्यवाद

+0

धन्यवाद, आपका समाधान अच्छी तरह से काम करता है। – martin

+0

आप एकाधिक मूल्यांकन() कॉल के साथ कैसे काम करते हैं? जैसे कि मैं लौटा मूल्य के साथ कुछ करना चाहता हूं और फिर उस पर आधारित पृष्ठ पर एक और मूल्यांकन करता हूं। –

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