VBAでselenium操作によるブラウザ処理の中でフォームに文字列を入力したい時などがあると思います。
そんな時は「SendKeys」を使うことが多いですが、長文などの場合は相当処理が遅くなります。
SendKeysはキーをひとつづつ押すという作業を疑似的に行うメゾットです。
プログラムといえどそれなりの時間がかかるということです。
そこで代替案ですが、javascriptをVBA上で実行することによってエレメントに文章を挿入する方法を紹介します。
これにより数千文字でも一瞬で処理が終わります。
Sub test() Dim driver As New Selenium.ChromeDriver 'ブラウザ設定 driver.Start "chrome" 'chromeを起動 driver.Get "https://www.google.com/?hl=ja" 'URLを指定して開く Dim args(0) As Variant 'javascriptに渡す配列(今回は1つ) target_selector = "document.querySelector('#tsf > div:nth-child(2) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input')" '対象のエレメントをjavascript表記で指定(getElementByIdやgetElementsByClassNameでも可) args(0) = "挿入するテキスト" driver.ExecuteScript target_selector & ".value = arguments[0];", args 'javascriptを実行 driver.Close 'chromeを閉じる Set driver = Nothing 'driveをリセットする End Sub
.ExecuteScriptがVBA上でseleniumを介してブラウザ上でjavascriptを実行するメゾットです。
第一引数に実行するjavascript、第二引数にjavascriptに引き渡す配列をセットします。
第二引数はjavascript内の「arguments[?]」に渡されます。
今回の例は1つですが複数処理する時などは配列で渡すほうがスマートでしょう。
コメント