2013-01-10 46 views
2

我使用Selenium Webdriver和python在網站上運行測試。在python上發送帶有Selenium Webdriver的unicode

蟒蛇2.7.2與最新的硒

我無法弄清楚如何發送Unicode,如德國的「Umlaute」(öäüß)的輸入形式。據我所知,webdriver可以處理unicode,所以這可能是一個python問題。

# -*- coding: iso-8859-1 -*- 

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.google.de") 
i = u"hälp me" 
driver.find_element_by_css_selector("INPUT[name=\"q\"]").send_keys(i) 

這工作沒有錯誤,但不發送「ä」。是否需要進一步的編碼/解碼...?

乾杯

+0

假定HTML頁面有編碼;在調用'.send_keys()'之前可以將輸入編碼爲該編碼? 'google.de'它被編碼爲'ISO-8859-1',因此請嘗試'.send_keys(i.encode('latin1')'。 –

+0

它發送的是什麼而不是ä標誌? –

+0

它不發送任何內容,而不發送ä。如果google.de在ISO-8859-1上運行,我應該用'i =「hälpme」''好,因爲我的文件是編碼的'# - * - coding:iso-8859-1 - * - '但是會拋出一個錯誤'UnicodeDecodeError:'utf8'編解碼器無法解碼位置0中的字節0x8a:無效的起始字節'.i.encode(「latin1」)'也不起作用 - 同樣的錯誤 – ananda

回答

4

的努力,我終於明白了幾個小時後,=) 看起來像我的IDE(科莫多)導致的問題 - 在首拉丁-4它很好地工作在兩種不同的方式設置編碼後:

申報字符串爲Unicode:

# -*- coding: iso-8859-4 -*- 

from selenium import webdriver 
from sys import version_info 

driver = webdriver.Firefox() 

driver.get("http://www.google.de") 

i = u"hälp me" 
driver.find_element_by_css_selector("INPUT[name=\"q\"]").send_keys(i) 

解碼拉丁-4和轉換爲Unicode:

# -*- coding: iso-8859-4 -*- 

from selenium import webdriver 
from sys import version_info 

driver = webdriver.Firefox() 

driver.get("http://www.google.de") 

i = "hälp me" 
i = unicode(i.decode("iso-8859-4")) 
driver.find_element_by_css_selector("INPUT[name=\"q\"]").send_keys(i) 

感謝大家幫助我!

乾杯

+2

(1)不要在字節串中使用非ascii字符(它在Python 3中被明確禁止)。請使用u''' unicode文字或在頂部添加'from __future__ import unicode_literals'來創建Unicode字符串。 (2)不相關:使用單引號,以避免在Python源代碼中引用雙引號:''[name =「q」]''。 (3)爲你的Python源代碼使用utf-8編碼(相應地配置你的IDE /編輯器),除非你有一個非常好的理由不要。 – jfs