SeleniumBasicの操作(基礎編)第5回:文字列の入力

 SeleniumBasicでホームページを開き、Web要素キャッチ後に各種Web操作が可能になります。そこで、今回はSeleniumBaisicの操作(基礎編)第5回目として、下図Web操作フロー図の中の「文字列入力」について解説していきます。

スクロールできます
ブラウザの起動
Web操作
ブラウザを閉じる

Web要素のキャッチ
ウィンドウの操作
フレームの移動
スクリーンショットの取得
HTML情報の取得
Cookie情報取得
(Web操作の代表的な操作例)

クリック
文字列入力
チェックボックス操作
ドラッグアンドドロップ
ドロップダウンリスト選択
ダイアログボックスの操作
テーブルデータの取得
ファイルダウンロード
Web要素のプロパティ取得
(Web要素キャッチ後のメソッド例)
目次

マクロファイル ダウンロード

 このページで掲載しているVBAのマクロファイルを以下リンクからダウンロードできます。必要に応じてファイルダウンロードして活用ください。

ダウンロードファイルのマクロ実行注意事項(ここをクリック)

 ファイルダウンロード後、マクロ実行するまでの注意事項を記載しておきます。

STEP
SeleniumBasicのインストール、ChromeDriverの更新

 マクロファイルを実行するには、事前にSeleniumBasicをインストールしておく必要があります。同時にChromeDriverを現在のChromeブラウザのバージョンに合わせて更新しておきます。SeleniumBasicのインストールとChromeDriverの更新については以下記事を参照ください。

STEP
コンテンツの有効化

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

STEP
セキュリティ リスク設定の確認

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

STEP
ファイルプロパティの変更

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

STEP
Selenium Type libraryのチェック

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

STEP
デバッグ実行

 一度ファイルを閉じて、再度ファイルを開き、「コンテンツの有効化」をクリックします。その後、マクロ実行します。ダウンロードファイルは基本的に実行ボタンを実装していませんので、マクロファイルを実行するには、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の構文とは関係ないですが、いろは歌に込められている意味等を知りたい方は以下の様なサイトで確認してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次