2013-10-25 70 views
7

我試圖得到的XPath與PhantomJS 1.9.2工作工作:的XPath查詢不PhantomJS

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

這是正在在頁面加載執行,而querySelector似乎正常工作總是返回null:

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

我在這個特定的XPath評估示例中錯過了什麼嗎?

+0

該文件有哪些MIME類型?它是否使用名稱空間' ...'? –

+0

我嘗試過與google.com例如和許多其他網站。相同的結果。 –

+0

MIME類型是否影響WebKit中的XPath實現? PhantomJS網站稱它具有對DOM處理,CSS選擇器,JSON,Canvas和SVG的本機支持。這是否意味着它沒有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);