2010-06-12 15 views
7

मैं पाइथन एपीआई के माध्यम से सेलेनियम आरसी में एक्सपैथ का उपयोग कर रहा हूं।एक xpath स्ट्रिंग के अंदर यूनिकोड का उपयोग कैसे करें? (यूनिकोड एन्कोडररर)

मैं क्लिक करने की जरूरत एक एक तत्व कौन है पाठ "भेजें» "है

यहाँ त्रुटि है कि मैं हो रही है:

In [18]: sel.click(u"xpath=//a[text()='Submit \xbb')]") 
--------------------------------------------------------------------------- 
UnicodeDecodeError      Traceback (most recent call last) 

/Users/me/<ipython console> in <module>() 

/Users/me/selenium.py in click(self, locator) 
    282   'locator' is an element locator 
    283   """ 
--> 284   self.do_command("click", [locator,]) 
    285 
    286 

/Users/me/selenium.py in do_command(self, verb, args) 
    201   body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('utf-8')) 
    202   for i in range(len(args)): 
--> 203    body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('utf-8')) 
    204   if (None != self.sessionId): 
    205    body += "&sessionId=" + unicode(self.sessionId) 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 28: ordinal not in range(128) 

उत्तर

3
sel.click(u"xpath=//a[text()='Submit \xbb')]") 

यह संभव है xPath अभिव्यक्ति है कि किसी भी यूनिकोड वर्ण शामिल लिखने के लिए।

उदाहरण के लिए:

//a[text()='Submit &#xBB;')]

1

मुझे लगता है कि तुम सिर्फ बदलने की जरूरत है

sel.click(u"xpath=//a[text()='Submit \xbb')]") 

को
sel.click(u"xpath=//a[text()='Submit \xbb')]".encode('utf8')) 

ऐसा इसलिए है क्योंकि त्रुटि से संकेत मिलता है कि सेलेनियम यूनिकोड ऑब्जेक्ट को बाइट स्ट्रिंग में एन्कोड करने का प्रयास कर रहा है (पाइथन के लिए डिफ़ॉल्ट कोडेक का उपयोग करके, 'ascii') और यह असफल रहा है; स्पष्ट रूप से इसे पहले एन्कोडिंग करके, संभवतः सही कोडेक ('utf8', एक्सएमएल में डिफ़ॉल्ट एन्कोडिंग) के साथ, इसलिए आपको इस समस्या से बचना चाहिए।

+1

मुझे लगता है कि जोड़ने की कोशिश की - यह अभी भी एक UnicodeDecodeError फेंकता है। कोई अन्य विचार? –

0

क्या sel_click() यूनिकोड तार या utf-8 (बाइट) स्ट्रिंग की अपेक्षा करता है? डरावना यूनिकोड एन्कोडर आमतौर पर तब होता है जब आप पहले (या कुछ अन्य एन्कोडिंग) की अपेक्षा करते हैं तो पहले में पास करने का प्रयास करते हैं।

मैं अभी की कोशिश नहीं कर सकते, लेकिन आप

"xpath=//a[text()='Submit \xc2\xbb')]" 
अपने तर्क के बजाय

उस पर (जो आप .encode('utf-8') का उपयोग करके प्राप्त) की कोशिश कर सकते।

+0

(एचएम, कभी नहीं। मुझे ऐसा लगता है कि एलेक्स मार्टेलि ने पहले से ही एक जवाब पोस्ट किया था ...) – chryss

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