2013-04-02 7 views
6

काम नहीं कर किसी कारण से जब मैं निम्नलिखित कोड चलाने की कोशिश के साथ XPath का उपयोग करना:CasperJS QuerySelectorAll

var casper = require('casper').create(); 
var x = require('casper').selectXPath; 
var links = []; 

casper.start('http://www.website.com'); 

function getLinks() { 
    var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a'); 
    return Array.prototype.map.call(links, function(e) { 
     return e.getAttribute('href') 
    }); 
} 

casper.then(function() { 
    links = this.evaluate(getLinks); 
    this.echo(links); 
} 

casper.run(); 

एक अशक्त वस्तु देता है, लेकिन जब मैं thenClick विधि, सब कुछ के साथ संयोजन के रूप में बहुत ही xpath चयनकर्ता का उपयोग ठीक काम करता है और यूआरएल बदलता है। पृथ्वी पर क्यों है?

उत्तर

9

तो, यह पता चला है कि querySelectorAll विधि वास्तव में XPath का समर्थन नहीं करती है। वास्तव में यह कैस्पर से बिल्कुल नहीं आता है, और ब्राउज़र द्वारा समर्थित है, यही कारण है कि यह CSS3 चयनकर्ता स्वीकार करता है, न कि XPath। मेरे लिए यह पता लगाना मुश्किल था कि मुझे पता चला कि अगर किसी और को यह समस्या हो तो मैं इसे स्थापित कर दूंगा। आप casperjs के भीतर इस के लिए CSS3 के चयनकर्ताओं का उपयोग करने के लिए लाइन तो है:

var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a'); 

की जरूरत के लिए बदला जा रहे हैं: हैकिंग

+1

यह कैस्परजेएस की 'क्वेरी चयनकर्ता (सभी' विधि नहीं है ... यह ब्राउज़र है। यह कल्पना केवल सीएसएस चयनकर्ताओं के उपयोग के लिए डिज़ाइन की गई है: http://www.w3.org/TR/selectors-api XPath अभिव्यक्तियां, जबकि उनका उपयोग चीजों का चयन करने के लिए किया जाता है, वे एक अलग परिवार हैं। – BoltClock

+0

आह, स्पष्टीकरण के उस बिट के लिए धन्यवाद। उत्तर अपडेट करें। –

2

नीचे समारोह Xpath साथ मेरे लिए काम करता

var links = document.querySelectorAll('ul#horizontalList li.paddingRight6 a'); 

मुबारक।

function getLinks() { 
var links =__utils__.getElementsByXPath('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a'); 
    return Array.prototype.map.call(links, function(e) { 
    return e.getAttribute('href'); 
}); 
} 
संबंधित मुद्दे