Python 如何在xpath字符串中使用unicode?(UnicodeEncodeError)

Python 如何在xpath字符串中使用unicode?(UnicodeEncodeError),python,unicode,xpath,selenium-rc,Python,Unicode,Xpath,Selenium Rc,我通过Python api在Selenium RC中使用xpath 我需要单击文本为“提交”的元素 下面是我得到的错误: In [18]: sel.click(u"xpath=//a[text()='Submit \xbb')]") --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most

我通过Python api在Selenium RC中使用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)
[18]中的
:选择。单击(u“xpath=//a[text()='Submit\xbb'))
---------------------------------------------------------------------------
UnicodeDecodeError回溯(最近一次呼叫最后一次)
/用户/me/in()
/单击中的Users/me/selenium.py(self,locator)
282“定位器”是元素定位器
283         """
-->284 self.do_命令(“单击“,[locator,]))
285
286
/do_命令中的Users/me/selenium.py(self、verb、args)
201 body=u'cmd='+urllib.quote_plus(unicode(动词).encode('utf-8'))
202对于范围内的i(len(args)):
-->203 body+='&'+unicode(i+1)+'='+urllib.quote_plus(unicode(args[i])。编码('utf-8'))
204如果(无!=self.sessionId):
205 body+=”&sessionId=“+unicode(self.sessionId)
UnicodeDecodeError:“ascii”编解码器无法解码位置28处的字节0xc2:序号不在范围内(128)

我想你只需要改变一下

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

这是因为错误表明Selenium正试图将Unicode对象编码为字节字符串(使用Python的默认编解码器,即
'ascii'
),这就是失败的原因;首先自己显式编码,使用可能正确的编解码器(
'utf8'
,XML中的默认编码)因此,您应该避免此问题。

sel_click()是否需要unicode字符串或utf-8(字节)字符串?可怕的UnicodeEncodeError通常发生在您尝试传入第一个字符串时,而后者(或其他编码)是需要的

我现在不能试试,但你可以试试

"xpath=//a[text()='Submit \xc2\xbb')]"
而不是你的参数(通过使用
.encode('utf-8')
得到)

可以编写包含任何Unicode字符的XPath表达式

例如:


//a[text()=“Submit»;”)]
我正在使用selenium和roboframework 我也有类似的问题。 我有一个带有特殊字符的Xpath,如下所示:

    xpath=(//a[contains(@href,'Ontkoppel cliënt')])[1]
我不得不用ascii码替换它,它工作得很好

    xpath=(//a[contains(@href,'Ontkoppel cli\u00EBnt')])[1]

希望这个例子有点帮助…

(嗯,没关系。我似乎一直在打这个,而亚历克斯·马尔泰利已经发布了答案…)我尝试添加了它-它仍然抛出一个Unicode DecodeError。还有其他想法吗?Python是否提供了这样的Unicode编码功能?我在@ivan_pozdeev中看不到任何相关内容,XPath表达式中的
=
比较的正确操作数是任何人都可以在Python中指定的字符串。即使Python不能使用Unicode,wh我怀疑,人们是否可以在XPath表达式中指定字符串,而XPath处理Unicode转换。当然,我可以自己编写这些符号,但这很不方便,我宁愿正常编写字符并将其传递给转换函数。我想问Python是否提供了一些转换
u“»的常用函数“
into
”»;“
@ivan\u pozdeev:在xpath开始时,在python标记
u
中问一个常规问题(而不是评论),解决了我的问题,谢谢!我不知道这是什么语言,但它不是Python。问题是Python特有的。您好,Ivan,这个问题是关于通过Python api在Selenium RC中使用xpath的,因此在上面的示例中,我已经说明了xpath中unicode或特殊字符的用法,以便通过Python在Selenium RC中使用它们。:)
    xpath=(//a[contains(@href,'Ontkoppel cliënt')])[1]
    xpath=(//a[contains(@href,'Ontkoppel cli\u00EBnt')])[1]