在使用selenium時候,難免會遇到需要處理中文的情況。畢竟咱們是在中國,做的產品大都也是和中文有強烈聯繫的。
舉例:打開好搜。搜索“靈魂擺渡”,找到類名爲:‘g-mohe ’的類。然後退出。
代碼如下:
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.haosou.com")
q = '靈魂擺渡'
driver.find_element_by_name("q").send_keys(q)
driver.find_element_by_name("q").submit()
driver.find_element_by_class_name('g-mohe ')
driver.quit()
代碼看起來是沒問題的,但是執行之後會報錯:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 0: unexpected end of data
這是什麼意思?在python2.7+selenium中,使用utf-8編碼的中文作爲參數調用send_keys()方法。
utf8編碼不能按照我們預期的填入對應的搜索框內。怎麼辦呢?
在這裏,我們可以使用解碼的方式,把utf8編碼變爲unicode。得到解決。
具體步驟:
把代碼中的driver.find_element_by_name("q").send_keys(q)
修改爲:driver.find_element_by_name("q").send_keys(q.decode())
或者你喜歡寫成:dirver.find_element_by_name("q").send_keys(u'靈魂擺渡')
也是可以的。你開心就好。
順帶一提decode方法,默認的參數就是'utf8'。所以如果你的中文字符串使用的本來就是utf8編碼。那麼就不用添加參數。
如果你的中文字符串是GBK編碼的,記得在使用decode方法時,寫爲:decode('GBK')