Python 如何在xpath字符串中使用unicode?(UnicodeEncodeError)
我通过Python api在Selenium RC中使用xpath 我需要单击文本为“提交”的元素 下面是我得到的错误: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
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]