2013-10-25 9 views
7

मैं PhantomJS 1.9.2 के साथ काम कर XPath पाने के लिए कोशिश कर रहा हूँ में काम नहीं करता:XPath देखने PhantomJS

var getElementsByXPath = function(xPath) { 
    return document.evaluate(
    xPath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); 
}; 
var root = getElementsByXPath("//div").iterateNext(); 

यह पृष्ठ लोड पर निष्पादित किया जा रहा है और हमेशा अशक्त रिटर्न जबकि querySelector सही ढंग से काम करने लगता है:

var divs = page.evaluate(function(s) { 
    return document.querySelector(s); 
}, 'div'); 

क्या मुझे इस विशेष XPath मूल्यांकन नमूने में कुछ याद आया?

+0

दस्तावेज़ में कौन सा एमआईएम प्रकार है? क्या यह नामस्थान का उपयोग करता है उदा। ' ...'? –

+0

मैंने उदाहरण के लिए और कई अन्य साइटों के साथ google.com के साथ कोशिश की। वही परिणाम –

+0

क्या एमआईएम प्रकार वेबकिट में XPath कार्यान्वयन को प्रभावित करता है? फैंटॉमजेएस साइट का कहना है कि इसमें डोम हैंडलिंग, सीएसएस चयनकर्ता, जेएसओएन, कैनवास और एसवीजी के लिए मूल समर्थन है। क्या इसका मतलब है कि इसमें XPath के लिए कोई अंतर्निहित क्षमता नहीं है? –

उत्तर

13

मैं अंत में पता चला है कि कॉल document.evaluate निम्नलिखित की तरह एक page.evaluate कॉल के साथ गले लगा लिया जाना चाहिए:

page.evaluate(function() { 
    document.evaluate(
     '//div', 
     document, 
     null, 
     XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
     null); 
}); 
+0

आपको अपना उत्तर स्वीकार कर लेना चाहिए था। –

0

आप phantomjs साथ एक विशेष xpath के HTML सामग्री प्राप्त करना चाहते हैं .. :-)

var xpath= '//*[@id="2b"]'; 
var address= 'www.mywebadress.com'; 
page.open(address, function(status) { 
     setTimeout(grabHtml, 2500); 
    }); 

function grabHtml() { 

var html = page.evaluate(function(xpath) { 

    if (document.evaluate) { 
     var xPathRes = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null) 
     if (xPathRes.singleNodeValue) { 
      var c = html.singleNodeValue.innerHTML; 
     } else if (xPathRes) { 
      var c = "No content found!"; 
     } 
    } else { 
     var c = "does not support the evaluate method!"; 
    } 
    return c; 
}, xpath); 

console.log(html);