【Selenium】SendKeysの文字入力が遅いときは『executeScript』で入力すると一瞬

Selenium(セレニウム)のSendKeysは遅いです。

webdriverでテキスト入力するときは、SendKeysで入力するのが一般的ですが、どうしても速さに限界があります。

そこで、テキストボックスに長い文字列を入力するときは、『executeScript』で入力するのがおすすめです。

executeScriptを使うと、テキストエリアのvalueにテキスト入力が可能になります。

入力したい文字列を直接代入できるので、長いテキストも、一瞬で入力できるようになります。

その方法を紹介します。

Seleniumの高速化が必要なときにおすすめです。

スポンサーリンク

テキストボックスに文字列を入力するコード

入力フォームのテキストボックス・テキストエリア・インプットボックスに、一瞬でテキストを入力するコードです。

executeScriptでJavascriptを実行することで、テキストボックスに文字列を入力します。

SendKeysと違って、タグのvalueに直接代入できるので、入力が一瞬で完了します。

コード例

Pythonのコード例です。

Pythonでジャバスクリプトの文字列を組み立てて、エクセキュートスクリプトに渡しています。

複数形の getElements はリストが返るので、ここでは例として、最初の要素[0]を指定しています。

"""テキストボックスに文字列を高速入力するコード"""
w.execute_script('document.getElementById("id属性").value="%s";' % text)
w.execute_script('document.getElementsByName("name属性")[0].value="%s";' % text)
w.execute_script('document.getElementsByClassName("class名(class属性)")[0].value="%s";' % text)

# 変数の説明 w: ウェブドライバー   text: 入力するテキスト

executeScriptの使い方は、Seleniumの公式マニュアルに載っています。

Java、C#(CSharp)、Python、Ruby、perl のコード例が載っていました。

Selenium – executeScript のマニュアル

Seleniumで任意のJavascriptを実行する『executeScript』メソッドのページです。

Selenium-WebDriver API Commands and Operations
Using JavaScript – executeScript のマニュアル

MDN Web Docs – Javascript のマニュアル

Javascriptの使い方のページをまとめました。

以下のジャバスクリプトを、セレニウムのエクセキュートスクリプトに渡して使います。

Javascriptでタグを取得するメソッドが載っているページです。
Document – Web API | MDN

タグのid属性で取得するメソッドです。
document.getElementById(String id)

タグのクラス名(クラス属性)で取得するメソッドです。
Document.getElementsByClassName()

タグのname属性で取得するメソッドです。
document.getElementsByName(String name)

タグ名で取得するメソッドです。
Document.getElementsByTagName()

スポンサーリンク

SendKeysで文字列を入力するコード

従来通り、SendKeysでフォームのテキストボックスに入力するコードです。

コード例

Pythonのコード例です。

複数形の find_elements はリストが返るので、ここでは例として、最初の要素[0]を指定しています。

"""send_keysで入力する方法"""
w.find_element_by_id('id属性').send_keys(text)
w.find_element_by_name('name属性').send_keys(text)
w.find_elements_by_class_name('class名(class属性)')[0].send_keys(text)

# 変数の説明 w: ウェブドライバー   text: 入力するテキスト

タグの取得方法は、Seleniumの公式マニュアルに載っています。

Java、C#(CSharp)、Python、Ruby、perl のコード例が載っていました。

タグの取得方法(Selenium公式マニュアル)

Seleniumでタグを取得するメソッドのページをまとめました。

Selenium-WebDriver API Commands and Operations
Locating UI Elements (WebElements)

By ID – タグのid属性で取得

By Class Name – タグのクラス名(クラス属性)で取得

By Tag Name – タグのname属性で取得

By Name – タグ名で取得

By CSS – CSSセレクタで取得

By XPath – XPathで取得

SendKeysは遅い

SeleniumのSendKeysはキー入力を再現しているので、どうしても input・textarea・テキストボックスへの文字入力が遅くなります。

なので、長いテキストを入力するときやテストの高速化が必要な時は、executeScriptでJavascriptを使う方法がおすすめです。

スポンサーリンク

executeScript('Javascript')で高速入力

テキストエリアに一瞬で入力するには、executeScript(エクセキュートスクリプト)で、文字列代入のJavascriptを書きます。

Javascriptでテキストエリアの .value に代入すれば、一瞬で入力が完了します。

クリップボードからテキストを貼り付けるように、『パッ!』と文字列が入ります。

Seleniumは、テキストの取得はできますが、テキストの入力方法となるとSendKeyくらいしかないんですよね。

そのあたりをカバーしてくれるのが、executeScriptになります。

Javascriptの実行さえ許可されていれば、テキスト入力が一瞬でできるようになります。

テキスト入力はセレニウムが苦手とするところですので、executeScript('Javascript')で入力するアプローチはおすすめです。

SendKeysでコピー&ペーストするアプローチ

SendKeysでも、クリップボードを使えばテキストの高速入力が可能です。

SendKeysでコピー&ペーストのキーボード操作を再現する方法になります。

Javascriptを使わなくても高速入力ができるので、こちらもひとつのアプローチだと思います。

タイトルとURLをコピーしました