2015年と2018年にSeleniumBasicを使ってMicrosoft Edgeを操作する方法について記事を書きました。
Windows 10 May 2019 Updateが公開され、Edge周りの環境が変わったので、改めて動作確認したいと思います。
動作確認環境
- Microsoft Windows 10 Pro バージョン 1903 (OS ビルド 18362.145) 64ビット版
- Excel 2016 MSO (16.0.4849.1000) 32ビット版
- Microsoft Edge 44.18362.1.0
- Microsoft EdgeHTML 18.18362
- SeleniumBasic v2.0.9.0
SeleniumBasicのインストール
GitHubのReleasesページからファイルをダウンロードし、インストールを行います。2019年6月時点でも、SeleniumBasicの最新版はv2.0.9.0となっていて、以前の記事公開時点から更新されていません。
WebDriverの選択画面では、Edge用のドライバーを選択します。
(といっても、SeleniumBasic付属のWebDriverは古過ぎて使い物になりません。)
下図画面の通り、インストール先は「%USERPROFILE%\AppData\Local\SeleniumBasic」となります。
.NET Framework 3.5の有効化
SeleniumBasicを動かすには、「.NET Framework 3.5」を有効化する必要があります。
[すべてのコントロール パネル項目] → [プログラムと機能] → [Windows の機能の有効化または無効化]から「.NET Framework 3.5 (.NET 2.0 および 3.0 を含む)」にチェックを入れて、OKボタンをクリック、指示に従ってインストールを行った後、PCを再起動すれば.NET Framework 3.5が有効になります。
.NET Framework 3.5が無効になっていると、SeleniumBasicのオブジェクトを作成しようとした時点で「実行時エラー ‘-2146232576 (80131700)’:オートメーション エラー」が発生します。
オートメーションエラーだけでは何が原因なのか分からず、SeleniumBasicを使うときに意外とハマりやすい罠なのでお気を付けください。
WebDriverの追加
Microsoftの公式サイトにある通り、Edge バージョン 18では、DISMコマンドでWebDriverを追加する必要があります。
DISM.exe /Online /Add-Capability /CapabilityName:Microsoft.WebDriver~~~~0.0.1.0
管理者権限で実行したコマンドプロンプトから、上記コマンドを実行すると、System32フォルダに「MicrosoftWebDriver.exe」ファイルが追加されます。
ファイルのバージョンも10.0.18362.1となっています。
SeleniumBasic付属のWebDriverと入れ替えて実行
WebDriverの準備ができたので、前回の記事に倣って、ファイルを入れ替えて実行してみました。
(「MicrosoftWebDriver.exe」ファイルを「%USERPROFILE%\AppData\Local\SeleniumBasic」にコピーして「edgedriver.exe」にリネーム)
--------------------------- Microsoft Visual Basic for Applications --------------------------- 実行時エラー '0': オートメーション エラーです。 この操作を正しく終了しました。
オブジェクトの作成時点ではエラーは発生しませんが、Startメソッドを実行しようとした時点でオートメーションエラーが発生します。
開発者向けドキュメントを参考に、AddArgumentメソッドで「jwp」オプションを付けてみましたが、結果は変わりません。
jwpオプションを付けて先にWebDriverを実行
仕方が無いので先にWebDriverを実行しておいて、StartRemotelyメソッドを使用することにしました。
(コードは前回の記事と大体同じですね。)
Option Explicit
Public Sub Sample()
Dim pid As Long
Dim pno As Long: pno = 17556
pid = StartEdgeDriver(PortNo:=pno)
If pid = 0 Then Exit Sub
With CreateObject("Selenium.WebDriver")
.StartRemotely "http://localhost:" & pno & "/", "MicrosoftEdge"
.Get "https://www.yahoo.co.jp/"
.FindElementById("srchtxt").SendKeys "あいうえお"
MsgBox "一時停止", vbInformation + vbSystemModal
.Quit
End With
TerminateEdgeDriver pid
MsgBox "終了", vbInformation + vbSystemModal
End Sub
Private Function StartEdgeDriver( _
Optional ByVal DriverPath As String = "C:\Windows\System32\MicrosoftWebDriver.exe", _
Optional ByVal PortNo As Long = 17556) As Long
Dim DriverFolderPath As String
Dim DriverName As String
Dim Options As String
Dim itm As Object, itms As Object
Dim pid As Long: pid = 0
With CreateObject("Scripting.FileSystemObject")
If .FileExists(DriverPath) = False Then GoTo Fin
DriverFolderPath = .GetParentFolderName(DriverPath)
DriverName = .GetFileName(DriverPath)
End With
'多重起動確認
Set itms = CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery _
("Select * From Win32_Process Where Name = '" & DriverName & "'")
If itms.Count > 0 Then
For Each itm In itms
pid = itm.ProcessId: GoTo Fin
Next
End If
'WebDriver実行
Options = " --host=localhost --jwp --port=" & PortNo
With CreateObject("WbemScripting.SWbemLocator").ConnectServer.Get("Win32_Process")
.Create DriverPath & Options, DriverFolderPath, Null, pid
End With
Fin:
StartEdgeDriver = pid
End Function
Private Sub TerminateEdgeDriver(ByVal ProcessId As Long)
Dim itm As Object, itms As Object
Set itms = CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery _
("Select * From Win32_Process Where ProcessId = " & ProcessId & "")
If itms.Count > 0 Then
For Each itm In itms
itm.Terminate: Exit For
Next
End If
End Sub
これでようやく上手くいきました。
下記キャプチャー動画の通り、VBAマクロからEdgeが操作できているのが分かるかと思います。
実は上記コードは、MSDNフォーラムの回答用に書いたコードになります。
Chromium版のEdgeも発表され、旧来のEdge操作なんて需要はないだろうと思っていましたが、今でもEdgeを操作したいという方は一定数おられるようです。




































この記事へのコメントはありません。