質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

0回答

797閲覧

【Selenium】何故GeckoDriverだと半角カタカナが入力できるのか知りたい。

hnkyi

総合スコア14

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2019/03/27 11:31

編集2019/03/27 11:39

知りたい事

タイトルの通りですが、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の場合は3byteUTF-8の場合は2byteShift-JISの場合は1byteとして扱われる。(参考:Wikipedia)

...

以下はただの推測です。

推測①:
FirefoxのWebDriverだけ半角カタカナ(1byte文字)に対する対応が入っており、他には入っていない。

推測②:
Firefoxのデフォルト文字コードはShift-JISであり、Shift-JIS環境の場合にのみ半角カタカナが入力できる。

推測③:
上記以外の何か。


以上です。

よろしくお願いいたします、、、。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問