Как использовать Unicode внутри строки xpath? (UnicodeEncodeError) - PullRequest
9 голосов
/ 12 июня 2010

Я использую xpath в Selenium RC через API Python.

Мне нужно нажать на элемент с текстом «Отправить» »

Вот ошибка, которую я получаю:

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 ]

3 голосов
/ 13 июня 2010
sel.click(u"xpath=//a[text()='Submit \xbb')]")

Можно писать выражения XPath, содержащие любые символы Юникода .

Например:

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

1 голос
/ 12 июня 2010

Я думаю, вам просто нужно изменить

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

на

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

Это потому, что ошибка указывает, что Selenium пытается кодировать объект Unicode в байтовую строку (используя значение по умолчаниюкодек для Python, то есть 'ascii') и вот что терпит неудачу;если вы сначала явно его закодируете, используя, по-видимому, правильный кодек ('utf8', кодировка по умолчанию в XML), вам следует избежать этой проблемы.

0 голосов
/ 20 апреля 2018

Я использую селен и роботизированную конструкцию У меня была такая же проблема. У меня был Xpath со специальным персонажем, как показано ниже:

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

и мне пришлось заменить на код ascii, и он работал нормально.

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

Надеюсь, пример немного поможет ...

0 голосов
/ 12 июня 2010

Ожидает ли sel_click () строки Юникода или строки utf-8 (байт)?Страшный UnicodeEncodeError обычно возникает, когда вы пытаетесь передать первое, когда ожидается последнее (или какая-то другая кодировка).

Я не могу попробовать это прямо сейчас, но вы можете попробовать

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

вместо вашего аргумента (который вы получите, используя .encode('utf-8')) для него.

...