[selenium] inputタグに日本語が設定できない時の対処法

ITSelenium

[検証環境]
python:2.7
文字コード:UTF-8

例:yahooの検索窓に「グーグル」と入力して、検索するスクリプトですが、このままだとエラーになります。

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep


# ブラウザを開く。
driver = webdriver.Chrome()
# Yahoo! ホームページを開く。
driver.get("https://www.yahoo.co.jp/")
# 検索語として「グーグル」と入力。
driver.find_element_by_xpath("//*[@id='srchtxt']").send_keys("グーグル")
# 検索ボタンクリック
driver.find_element_by_xpath("//*[@id='srchbtn']").click()
# 10 秒停止
sleep(10)
# ブラウザを閉じる
driver.close()

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe3 in position 0: unexpected end of data

「"グーグル"」の前に u を追記。「u"グーグル"」としたら、エラーになりません。

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep


# ブラウザを開く。
driver = webdriver.Chrome()
# Yahoo! ホームページを開く。
driver.get("https://www.yahoo.co.jp/")
# 検索語として「グーグル」と入力。
driver.find_element_by_xpath("//*[@id='srchtxt']").send_keys(u"グーグル")
# 検索ボタンクリック
driver.find_element_by_xpath("//*[@id='srchbtn']").click()
# 10 秒停止
sleep(10)
# ブラウザを閉じる
driver.close()

Pythonは通常の文字列とユニコード文字列があって、unicodeにdecodeせず、通常の文字列のままだと、「バイト単位」で処理してしまい、「utf-8にdecodeできない」というエラーが出力されるようで、Unicode文字列にして、「文字単位」で処理させればいいってことですね、これ。

ターミナルに出力する場合はdecodeしてから出力してくれるらしいので、なおさらややこしかったです。

参考:
Pythonでマルチバイト文字を扱う際に気をつける点。

Unicode文字列(ユニコード文字列)

スポンサーリンク

Posted by nobuhiro harada