知りたい事
タイトルの通りですが、SeleniumにてGeckoDriverを用いた場合にのみ半角カタカナが入力できる理由を知りたいです。
「driver.execute_script()
を使えば半角入力できるよ!」というのは既に知ってるので、ここでは不要です。
やりたい事
Seleniumで半角カナを入力したい。
試した事
OSは「Windows10(Enterprise)」です。
ChromeDriver(Chrome)を使って実行
結果:半角カナが入力できない。
ダウンロードサイトから、以下のドライバーを取得・設定しました。
- 2.46
- 72.0.3626.69
- 73.0.3683.68
- 74.0.3729.6
IEDriver(IE)を使って実行
結果:半角カナが入力できない。
Githubに記載されているダウンロードサイトから、以下のドライバーを取得・設定しました。
- 3.8
- 3.9
GeckoDriver(Firefox)を使って実行
結果:半角カナが入力できる。
Githubから、以下のドライバーを取得・設定しました。
- v0.24.0
ソースコード
実際は別のサイトを使用していますが、ここでは説明のためにQiitaを使用しています。
python
1# coding: utf-8 2 3import time 4from selenium import webdriver 5 6# Webドライバー:Chromeの場合 7# driver = webdriver.Chrome(r'C:\PATH\TO\FILE\chromedriver.exe') 8# Webドライバー:IEの場合 9# driver = webdriver.Ie(r'C:\PATH\TO\FILE\IEDriverServer.exe') 10# Webドライバー:Firefoxの場合 11driver = webdriver.Firefox() 12 13# ログインページ表示 14driver.get("https://qiita.com/") 15time.sleep(1) 16 17# 半角カタカナ入力 18elm_user_name = driver.find_element_by_xpath('//*[@id="url_name"]') 19elm_user_name.send_keys(u"ハンカク カタカナ ニュウリョク シタイ")
上記のコードを使用すると、Firefoxだと「ハンカク カタカナ ニュウリョク シタイ
」と入力され、Chrome/IEだと「fyth tqtu i(4l)h dqe
」と入力されます。
調べた事や推測
FirefoxのWebDriverが取得できるGithubのうち、v0.20.0にて以下の文言がありました。
原文:
Grapheme clusters are now accepted as input for keyboard input to actions.
Input to the value field of the keyDown and keyUp action primitives used to only accept single characters, which means geckodriver would error when a valid grapheme cluster was sent in, for example with the tamil nadu character U+0BA8 U+0BBF.
Thanks to Greg Fraley for fixing this bug.
Google翻訳:
書記素クラスタは、アクションへのキーボード入力の入力として受け入れられるようになりました。
keyDownおよびkeyUpアクションプリミティブのvalueフィールドへの入力は単一文字のみを受け入れるために使用されます。これは、有効な書記素クラスタが送信されたときにgeckodriverがエラーを起こすことを意味します。
このバグを修正してくれたGreg Fraleyに感謝します。
「single characters」が「単一文字」と翻訳されてますが、おそらくこれは「1byte文字」を指しているのだと思います。
また、半角カタカナは、UTF-8の場合は3byte、UTF-8の場合は2byte、Shift-JISの場合は1byteとして扱われる。(参考:Wikipedia)
...
以下はただの推測です。
推測①:
FirefoxのWebDriverだけ半角カタカナ(1byte文字)に対する対応が入っており、他には入っていない。
推測②:
Firefoxのデフォルト文字コードはShift-JISであり、Shift-JIS環境の場合にのみ半角カタカナが入力できる。
推測③:
上記以外の何か。
以上です。
よろしくお願いいたします、、、。
あなたの回答
tips
プレビュー