SeleniumBasicでホームページを開き、Web要素キャッチ後に各種Web操作が可能になります。そこで、今回はSeleniumBaisicの操作(基礎編)第5回目として、下図Web操作フロー図の中の「文字列入力」について解説していきます。
ブラウザの起動 |
Web操作 |
ブラウザを閉じる |
Web要素のキャッチ |
ウィンドウの操作 |
フレームの移動 |
スクリーンショットの取得 |
HTML情報の取得 |
Cookie情報取得 |
クリック |
文字列入力 |
チェックボックス操作 |
ドラッグアンドドロップ |
ドロップダウンリスト選択 |
ダイアログボックスの操作 |
テーブルデータの取得 |
ファイルダウンロード |
Web要素のプロパティ取得 |
マクロファイル ダウンロード
このページで掲載しているVBAのマクロファイルを以下リンクからダウンロードできます。必要に応じてファイルダウンロードして活用ください。
ダウンロードファイルのマクロ実行注意事項(ここをクリック)
ファイルダウンロード後、マクロ実行するまでの注意事項を記載しておきます。
マクロファイルを実行するには、事前にSeleniumBasicをインストールしておく必要があります。同時にChromeDriverを現在のChromeブラウザのバージョンに合わせて更新しておきます。SeleniumBasicのインストールとChromeDriverの更新については以下記事を参照ください。

マクロファイルを開き、「コンテンツの有効化」をクリックします。

Web上からダウンロードしたマクロファイルはデフォルトで実行できない様に設定されています。ダウンロードしたマクロファイルを開いて以下の様に(このファイルのソースが信頼できないため、Microsoftによりマクロの実行がブロックされました。)表示される場合はファイルプロパティを変更します。

ファイルプロパティを開いて、セキュリティ項目の「許可する」にチェックを入れ、「OK」をクリックする。

VBE(Visual Basic Editor)画面の参照設定を開き、「Selenium Type library」にチェックを入れて、OKをクリックします。

一度ファイルを閉じて、再度ファイルを開き、「コンテンツの有効化」をクリックします。その後、マクロ実行します。ダウンロードファイルは基本的に実行ボタンを実装していませんので、マクロファイルを実行するには、VBEを開き、デバッグ実行によって、スクリプト実行します。

Excelファイルを開いた後、Alt + F11にてVBEエディタを開き、該当のプロシージャまでカーソル移動して、F5にてデバッグ実行します。
入力ボックスに文字列入力、Enterキー入力
GoogleChromeトップページの検索ボックスに文字列を入力し、Enterキーを入力して検索実行します。
VBAコード
まずはVBAのコードを紹介します。
Private Sub FindElement_Css()
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByCss("#APjFqb")
elm.SendKeys "hoge"
driver.Wait 2000
Dim Keys As New Keys
elm.SendKeys Keys.Enter
Stop
driver.Quit
End Sub
動作解説
Googleホーム画面から検索ボックスに文字列を入力して、検索実行するまでをSeleniumBasicで実行できる様にします。以下の様なステップを踏みます。イメージはクリックすると拡大表示されます。
今回のテーマは、以下解説の3,4項目が該当します。
1. Googleホームページを開く
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"

ChromeDriverのインスタンス生成し、GoogleChromeを立ち上げます。これでChromeブラウザを操作できる様になります。このdriverオブジェクトで指定したURLのホームページを開く事ができる様になります。今回は、Googleホームページを指定しました。
2. 検索ボックスのWeb要素キャッチ
Web要素のキャッチ + Web要素をelm変数に代入
Dim elm As WebElement
Set elm = driver.FindElementByCss("#APjFqb")

ChromeDriverクラスのFindElementByCssメソッドを利用してWeb要素をキャッチします。また、elmオブジェクトに当該のWeb要素を代入します。
3. 検索ボックスに文字列を入力する
elm.SendKeys "hoge"

変数elmに代入したWebElementクラスでキャッチした検索ボックスにSendKeysメソッドを使用して文字列を入力します。
4. 検索ボタンにEnter入力して検索実行
Dim Keys As New Keys
elm.SendKeys Keys.Enter

EnterやShift等の特殊文字の入力を実行します。Dim KeysでKeysクラスのインスタンスを生成して、特殊文字を入力できる準備をしています。変数elmに代入したWebElementクラスのSendKeysメソッドで引数をEnterキーにて文字列入力します。Keysクラスで入力できる特殊文字列の一覧はこちらから確認できます。
入力済の文字列クリア
ホームページによっては、入力ボックスに初期値が入力されているサイトもあります。入力値をまずクリアしてから文字列を入力する場合、最初に初期値をクリアする必要があります。
入力文字をクリアする構文は以下のとおり。
Webelemet.Clear
以下例では、GoogleChromeのトップページ検索ボックスに
「文字列("hoge")を入力」⇒「文字列クリア」⇒「新たな文字列("programan")を入力」
という流れで命令文が構成されています。
Private Sub Input_Clear()
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByCss("#APjFqb")
elm.SendKeys "hoge"
driver.Wait 1000
elm.Clear
driver.Wait 2000
elm.SendKeys "programan"
driver.Wait 2000
driver.Quit
End Sub
8行目で文字列をクリアしています。
elm.Clear
入力文字の確定
ここでは入力文字を確定するために、SeleniumBasicのKeysクラスでEnterキーを入力する方法と、Submitメソッドを使用する方法を紹介します。
文字入力後のEnterキー入力
通常、私達はGoogleChromeのトップページ検索ボックスに検索したいワードを入力してから、検索実行するために「Enterキー」を入力します。
SeleniumBasicで検索を実行するためにGoogleChromeのトップページ検索ボックスに「文字列の入力」⇒「Enterキーの入力」という流れで命令文を実行します。
WebElement.SendKeys "文字列", <Enterキー>
上記構文で"文字列"とEnterキーの順番を逆にしても命令文は正しく実行されませんので、引数の順番も気を付けてください。以下、例文です。
Private Sub Input_Enter()
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim ele As WebElement
Set ele = driver.ActiveElement
driver.Wait 2000
ele.SendKeys "programan", driver.Keys.Enter
driver.Wait 2000
driver.Quit
End Sub
5行目で「ActiveElement」メソッドが出てきました。ActiveElementメソッドは、読んで字のごとくアクティブ状態のWeb要素を取得します。GoogleChromeトップページを開くと、初期状態で検索ボックスにカーソルが当たっている(アクティブ状態である)ため、FindElementをせずともアクティブ状態のWeb要素を取得することができます。
7行目で「文字列入力」と「Enterキーの入力」を実行しています。「文字列入力」と「Enterキーの入力」の入力について、SeleniumBasicではいくつか表現方法があります。とりあえず「,(カンマ)」を利用した方法を覚えてもらえれば問題ないので、以下パターンは興味があれば確認してみてください。
「文字列入力」+「Enterキーの入力」表現パターン(ここをクリック)
- WebElement.SendKeys "文字列", <Enterキー>
-
上記例で紹介した例です。「,(カンマ)」で入力値とEnterキーの入力を実行しています。
ele.SendKeys "programan", driver.Keys.Enter
- WebElement.SendKeys "文字列" & <Enterキー>
-
「,(カンマ)」の代わりに「&」を利用する事ができます。
ele.SendKeys "programan" & driver.Keys.Enter
- 文字列入力とEnterキー入力の命令文を分ける
-
Keysクラスを生成し、文字列入力の命令文とEnterキーの命令文を分けます。
Dim Keys As New Keys ele.SendKeys "programan" ele.SendKeys Keys.Enter
- Enterキー入力 別方法
-
「driver.Keys.Enter」の代わりにKeysクラスを生成し、「Keys.Enter」でEnterキーを入力します。
Dim Keys As New Keys ele.SendKeys "programan", Keys.Enter
- Returnキーの利用
-
「Enterキー」の代わりに「Returnキー」を利用することもできます。
ele.SendKeys "programan", driver.Keys.Return
Submitメソッドの利用
Web画面で文字列を入力するシーンは、GoogleやYahooの検索ボックスに文字列を入力する他、お問い合わせフォームや申請フォームに文字列を入力して、送信ボタンをクリックするシーンがあります。
Web上の入力フォームの各項目に「文字列の入力」⇒「フォーム送信」という流れで命令文を実行します。SeleniumBasicのSubmitメソッドで入力フォームの送信ボタンをクリックする事ができます。命令文は以下のとおり。
WebElement.Submit
以下、例文です。
Private Sub Input_Submit()
Dim Driver As New ChromeDriver
Driver.Get "https://www.htmq.com/tutorial/mailform/sample/"
Driver.Wait 2000
Dim ele(3) As WebElement
Set ele(0) = Driver.FindElementByName("namae")
ele(0).SendKeys "hoge"
Set ele(1) = Driver.FindElementByName("mailaddress")
ele(1).SendKeys "hoge@hoge.com"
Set ele(2) = Driver.FindElementByName("naiyou")
ele(2).SendKeys "hogehoge"
Driver.Wait 3000
ele(2).Submit
Driver.Wait 3000
Driver.Quit
End Sub
各入力フォームの「Web要素を取得」⇒「文字列を入力」を繰り返し、13行目でフォーム送信を実行しています。
ele(2).Submit
以下でもう少し詳しくSubmitメソッドについて解説をしています。興味があればクリックして内容確認してみてください。
Submitメソッド詳細解説(ここをクリック)
HTMLにおいてinputタグやbuttonタグのtype属性値に「submit」を指定すると、送信ボタンがWeb上に設置されます。SeleniumBasicでWeb上の入力フォーム確定ボタンを送信する際、Submitメソッドを利用することで、取得したWeb要素が属するフォーム上で「type="subimt"」にて生成された送信ボタンをクリックすることができます。
以下、例文で利用したWebフォームをGoogleChromeのデベロッパツールで確認してみます。フォームのWebElementを見てみると、formタグ内に、"お名前", "メールアドレス", "お問合せ内容", "入力内容を確認するボタン"の4つの子要素があることが確認できます。

ele(2)は、 "お問合せ内容"の入力フォームWeb要素を取得しています。わざわざ、ele(3)で「入力内容を確認するボタン」のWeb要素を取得しなくても、ele(2)の要素でSumitメソッドを使用すれば、同じフォーム内に設置された送信ボタンがクリックされます。その他、ele(0)やele(1)でSumitメソッドを使用しても送信ボタンがクリックされます。
文字列の入力(クリップボード利用)
RPAツールを使う場合、多量の文字列を入力すると文字列を入力している最中に次の命令分に移ってしまう場合が多いです。SeleniumBasicは基本的に命令した動作が終了するまで次の命令文には移りませんが、PCの性能によっては文字列を入力している間に次の命令文に移ってしまい、文字列が全て入力されない可能性があります。SeleniumBasicでも多量の文字列を入力する場合はクリップボードを利用した方が良いでしょう。
クリップボード利用方法は、「文字列をクリップボードにコピー」⇒「ショートカットキー:Ctrl + Vでペースト」という流れになります。以下構文です。
ChromeDriver.SetClipBoard "文字列"
WebElement.SendKeys Keys.Control, "v"
今回は、このホームページのお問合せフォーム内にある、入力フォームに長文を入力します。入力する文章はいろは歌を入力してみたいと思います。
Private Sub Usage_ClipBoard()
Dim Keys As New Keys
Dim Assert As New Selenium.Assert
Dim driver As New ChromeDriver
driver.Get "https://programan.org/contact/"
Dim ele As WebElement
Set ele = driver.FindElementByName("imp5")
driver.SetClipBoard "いろはにほへと ちりぬるを" & vbCrLf & "わかよたれそ つねならむ" & vbCrLf & "うゐのおくやま けふこえて" & vbCrLf & "あさきゆめみし ゑひもせす"
ele.SendKeys Keys.Control, "v"
driver.Wait 5000
ele.Clear
driver.SetClipBoard "いろはにほへと" & vbCrLf & "ちりぬるをわか" & vbCrLf & "よたれそつねな" & vbCrLf & "らむうゐのおく" & vbCrLf & "やまけふこえて" & vbCrLf & "あさきゆめみし" & vbCrLf & "ゑひもせす"
ele.SendKeys Keys.Control, "v"
driver.Wait 5000
Stop
driver.Quit
End Sub
8,9行目及び、12,13行目で「文字列をクリップボードにコピー」と「ショートカットキー:Ctrl + Vでペースト」を実行しています。
driver.SetClipBoard "いろはにほへと ちりぬるを" & vbCrLf & "わかよたれそ つねならむ" & vbCrLf & "うゐのおくやま けふこえて" & vbCrLf & "あさきゆめみし ゑひもせす"
ele.SendKeys Keys.Control, "v"
VBAの構文とは関係ないですが、いろは歌に込められている意味等を知りたい方は以下の様なサイトで確認してみてください。