VBA Edge制御 導入

提供:yonewiki
2024年12月25日 (水) 13:36時点におけるYo-net (トーク | 投稿記録)による版 (→‎概要)

VBAに戻る。

概要

 VBAでEdge制御をするには、ちょっと準備が必要です。InternetExplorerの制御の場合はあまり準備はいらないらしい。今後のこととInternetExplorer非対応のWebサイトもありますので、Edge制御を勉強していこうと思います。InternetExplorerの制御から勉強するのもいいかもしれない。


 まずSeleniumBasicというものをインストールしないとVBAから制御できないです。制御できるように橋渡しをしてくれるLibraryです。なんでこんなことになってしまったんでしょ。ちなみにChromeもこのツールから制御できます。橋渡ししてくれるツールがあるだけありがたいと思えって感じだね。


 以下のリンクからダウンロードします。


https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0


 インストーラー形式なので、承諾したり次へ次へという感じだけでインストールできるものです。簡単なのでこまごまとした操作までは説明しません。


 次に、Edge Web Driverというものをダウンロードする必要があります。これはバージョン毎にMicrosoftからDriverが提供されますが、Edgeが1か月に1回くらいのペースで更新されるので、都度、同じバージョンのDriverに更新しつづける必要があります。同じバージョンのDriverはSelenumBasicのWindowsの場合、ユーザ毎の設定領域に保存する必要があります。


  • User\(UserID)\AppData\Local\SeleniumBasicというフォルダにedgedriver.exeという名前で保存する必要があります。


 マイクロソフトが提供するDriverファイル名はmsedgedriver.exeという名前なのでリネームが必要です。


 Driverファイルは以下のサイトから入手します。


https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH#downloads


 のStable Channelというカテゴリのものをダウンロードします。今日時点では、Version 131.0.2903.112です。なのでEdgeを最新に更新して合わせこまないといけません。EdgeのVersionはブラウザを表示しているときのアドレスバーの右にある[…]というボタンを押して表示されるメニューから、[ヘルプとフィードバック]の中の[Microsoft Edgeについて]というのをクリックして表示される設定ページで確認できます。バージョン情報は一番上の方に薄い灰色の文字で表記されています。バージョン 131.0.2903.112 (公式ビルド) (64 ビット)のような表記があります。Edgeの状態がその下に表示されていてMicrosoft Edge は最新です。と表示されていれば最新なので、最新版のDriverをダウンロードするだけです。最新版に更新しないといけないときもここから更新できます。とにかく、Versionはひとつの違いもない、全く同じものをダウンロードする必要があります。


 この面倒な操作はコマンドラインプログラムをC言語で組んだりして、自動化できるらしいです。管理人もゆくゆくはやってみようと思っていますが、後日の対応になりそうです。


 そして、.NetFramework3.5のインストールとドライバの動作確認をするべく


  • User\(UserID)\AppData\Local\SeleniumBasic\ScriptにあるStartEdge.vbsを動かします。


vbsを動かせない環境もあるらしいですが、その場合は別の方法でインストールして下さい。StartEdge.vbsが動くとEdgeが起動して、メッセージボックスが表示されて、Edgeが終了するという正常な動作が起こります。


 ここまで来たら、VBAでテストスクリプトを動かしてみましょう。Googleの仕様が変わっていなければ動くサンプルです。変わっていればちょこっと修正が必要でしょう。


Public Sub グーグル検索()
    Dim driver As Selenium.EdgeDriver
    Set driver = New Selenium.EdgeDriver
    With driver
        .Start
        .Get "https://www.google.com/"
        .FindElementByName("q").SendKeys ("Yonewiki")
        .FindElementByCss("input.gNO89b").Click '.FindElementById("btnK").Clickでもいいかなと思ったけどダメだった。
        Debug.Print .FindElementById("search").Text
        .Quit
    End With
End Sub


 うまく動けば、Edgeを起動して、Yonewikiという検索ワードで検索して、イミディエイトウィンドウにその結果を表示して、Edgeが閉じられるという動作になりあす。関数が終了するとdiverのオブジェクトが消えるので、Edgeブラウザも消えます。開いたままにするには、途中でスクリプトを止めるダイアログボックスを表示して、.Quitを実行せずにプログラムを待ち状態にする必要があります。たぶん。Edgeでの操作が終わったらダイアログボックスを操作して閉じる感じか続けての操作をするとか言う感じになるのかもしれません。あるいは、ダイアログボックスではなくブレークポイントを設定するだけでもよいでしょう。とにかく関数が終了してdirverオブジェクトが閉じられると、Quitの実行するもしないも関係なくEdgeブラウザも終了してしまいます。

 

VBAに戻る。