【VBA&seleniu】SendKeysで入力が重たい場合はjavascript実行を使う

excelvbaエクセル

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つですが複数処理する時などは配列で渡すほうがスマートでしょう。

 

 

コメント

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