如何在xpath字符串中使用unicode?(独角兽)

2024-05-03 11:14:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过Python api在Selenium RC中使用xpath。

我需要点击一个文本为“Submit”的元素

下面是我得到的错误:

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)

Tags: inpyselfseleniumunicodeargsbodyusers
3条回答

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

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

"xpath=//a[text()='Submit \xc2\xbb')]"

而不是你的论点(你用.encode('utf-8')得到的)。

我想你只是需要改变

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

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

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

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

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

例如:

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

相关问题 更多 >