如何在 XPath 字符串中使用 Unicode?(UnicodeEncodeError)
我正在通过Python接口在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)
4 个回答
0
sel_click()这个函数是需要接收unicode字符串还是utf-8(字节)字符串呢?通常,当你传入了unicode字符串,而这个函数其实需要的是utf-8字符串(或者其他编码格式)时,就会出现让人头疼的UnicodeEncodeError错误。
我现在不能试,但你可以试试
"xpath=//a[text()='Submit \xc2\xbb')]"
用这个替代你传入的参数(你可以通过使用.encode('utf-8')
来得到这个参数)。
1
我觉得你只需要把
sel.click(u"xpath=//a[text()='Submit \xbb')]")
改成
sel.click(u"xpath=//a[text()='Submit \xbb')]".encode('utf8'))
这是因为错误提示说,Selenium 正在尝试把一个 Unicode 对象转换成字节字符串(使用 Python 默认的编码方式,也就是 'ascii'
),而这个过程出现了问题;如果你先自己手动进行编码,使用的应该是正确的编码方式('utf8'
,这是 XML 中的默认编码),那么就可以避免这个问题。
3
sel.click(u"xpath=//a[text()='Submit \xbb')]")
你可以写包含任何Unicode字符的XPath表达式。
比如说:
//a[text()='提交 »')]