職場で多用されてるIE自動化の代替を考える

# Excel VBAを使ったIE自動化
　Internet Explorer 11は2022年6月15日でサポート終了が発表されている。でも職場ではVBAを使った下記のようなIE自動化を今でもよく見かける。

```vb:IEをCreateObject関数でオブジェクトにして操作する方法
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
```
　この方法はIEのサポート終了後に主に使用されるChromeやEdgeなどのブラウザでは使えない。なお、以後はEdgeを自動化する前提にする。
※CreateObject関数は[ActiveX](https://ja.wikipedia.org/wiki/ActiveX)オブジェクトへの参照を返すが、EdgeやChromeはActiveX非対応のため

# Edgeをプログラムから操作する方法
　Edgeを自動化するためにWebDriverを介して操作する方法が提供されている。WebDriverはプログラムからHTTPリクエストを受け付けて、その内容に応じたブラウザ操作を行う仕組みなっている。つまり、WebDriverに対してHTTPリクエストを送ることでEdgeを自動化プログラムから操作できる。解説は以下の記事が分かりやすかった。

https://qiita.com/YoshikiIto/items/ee42fa8931f2d97ff60c

# WebDriverを使った自動化の方法
　WebDriverはW3Cで勧告された仕様に従って各ブラウザベンダーから提供されていて、言語に依存しない仕組みなっている。
　Excel VBAを使った業務の自動化は古い手法だが、実際の職場ではまだまだニーズがある。そこで、今回はまずExcel VBAでのIE自動化に代わるEdge自動化の方法を考えてみる。しかしながら、VBAよりも簡単にこの仕組みを使いこなせる言語が存在しているのは明らかだ。そこで、最近の業務自動手法として有力になっているPythonやNode.jsを用いた手法も併せて考えてみたいと思う。
## WebDriverの入手
　下記のサイトから現在使用しているEdgeのバージョンに合ったものをダウンロードする。

https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/

　ダウンロードしたzipファイルの中にあるmsedgedriver.exeを実行すると下のように表示されるはず。

```:実行結果
Starting MSEdgeDriver 98.0.1108.50 (4203d3deac4b85375d37f4d77d1ffb334a2a6138) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping MSEdgeDriver safe.
MSEdgeDriver was started successfully.
```
　EdgeのWebDriverはデフォルトでPort 9515をListenしているようだ。```--port=<ポート番号＞```とすれば変更も可能。

## WebDriverを理解する
　WebDriverの仕組みを理解するのに下記リンクが参考になった。

https://yizm.work/powershell/w3c-webdriver-api_powershell_1/

　また、W3Cの仕様書は下記のリンク先。

https://www.w3.org/TR/webdriver2/#design

## VBAからWebDriverを使用する
　WebDriverを使用する場合にはSeleniumというフレームワークを使用するのが一般的（というかWevDriverはこのSeleniumの仕組みをもとに標準化されている）。だが、VBAからSeleniumを使用する場合、実行する各PCに[Selenium-Basic](https://florentbr.github.io/SeleniumBasic/)をインストールする必要があるため、Excel VBAを使って自動化を提供する際の『Excelが入ってるPCならできる』というほとんど唯一といってもいい利点が失われてしまう。なので、下記リンク先のようにSeleniumを使用せずにダイレクトにWebDriverを使う方法が必要になる。

https://qiita.com/uezo/items/66e20b064ffd5f239b9a

 この記事の著者@uezoさんがMITライセンスでGitHubに公開している[TinySeleniumVBA](https://github.com/uezo/TinySeleniumVBA)を使用するのがもっとも効率的かもしれない。

## VBA以外の言語を使用する場合
### Python
　Pythonの場合はselenium4から公式にサポートされているので簡単にインストールし、使用することができる。

https://www.selenium.dev/ja/documentation/webdriver/getting_started/install_library/

　ドキュメントやネット上の記事なども豊富なので、比較的簡単に導入ができる。Pythonの実行環境が整えられるのであれば、間違いのない選択肢になると思う。WebDriverのバージョン管理をしてくれるサードバーティーもあるので、自分で実装する必要はない。

https://pypi.org/project/webdriver-manager/

### C#も使えそう
　C#もPythonと同じ感じでSeleniumを使用できそう。WebDriverのバージョン管理のパッケージも存在している。

https://github.com/rosolko/WebDriverManager.Net

### JavaScript(Node.js)
　JavaScriptの状況もほぼ同様、Node.jsでSeleniumを使用することができる。しかしながらWebDriverのバージョン管理のパッケージは見当たらないので、自力で実装する必要がありそう。

```powershell:npmを使ってSeleniumをインストール
npm install selenium-webdriver
```

# Selenium以外の選択肢
## [playwright](https://playwright.dev/)
　GoogleでPuppeteerというNode.js用のライブラリを開発していた人がMicrosoftに移って開発している事実上の後継ライブラリ。Seleniumとは違い、Chrome DevToolsプロトコルを介してブラウザを操作する仕組みで、すでに多言語サポートされている。MicrosoftもEdgeのオートメーションの選択肢として挙げている。

https://docs.microsoft.com/en-us/microsoft-edge/playwright/

　オリジナルはJavascriptだが、すでにPythonと.Netにも対応している。