如何在 XPath 字符串中使用 Unicode?(UnicodeEncodeError)

11 投票
4 回答
10405 浏览
提问于 2025-04-15 23:53

我正在通过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()='提交 &#xBB;')]

撰写回答