2年以上前、SeleniumBasicがMicrosoft Edgeに対応した頃、当ブログでも取り上げたことがありました。
SeleniumBasicの更新が2年以上止まっていることもあり、しばらく触っていなかったのですが、気が向いたので久しぶりにSeleniumBasicでEdgeを操作してみることにしました。
SeleniumBasicのインストール
GitHubのReleasesページからファイルをダウンロードし、インストールを行います。2018年7月時点では、SeleniumBasicの最新版はv2.0.9.0となっています。
インストールするWebDriverの選択画面が表示されますが、ここではとりあえずEdge用とIE用のものを選択しておきます。
下図画面の通り、インストール先は「%USERPROFILE%\AppData\Local\SeleniumBasic」となります。
動作確認
インストール後、簡単なコードで動作確認を行います。
Public Sub Sample1()
With CreateObject("Selenium.EdgeDriver")
.Start
.Get "https://www.yahoo.co.jp/"
.FindElementById("srchtxt").SendKeys "あいうえお"
MsgBox "一時停止", vbInformation + vbSystemModal
.Quit
End With
MsgBox "終了", vbInformation + vbSystemModal
End Sub
上記コードを実行したところ、下図のエラーが発生しました。
やはり更新の止まっている古いSeleniumBasicではEdgeを操作できないのでしょうか?
確認のため、インストール先のフォルダを見てみると、Edge用のWebDriver(edgedriver.exe)を見つけました。
ただ、このファイルはバージョンが10.0.10240.0と、かなり古いものです。
そこで、公式サイトから最新のファイルをダウンロードし、WebDriverを差し替えたところ(「MicrosoftWebDriver.exe」から「edgedriver.exe」にリネーム)、上記コードが問題なく動作するようになりました。
WebDriverを指定してSeleniumBasicによる操作を実行
WebDriverを最新のファイルに差し替えることで動作することは確認できましたが、ブラウザー(WebDriver)が更新されるたびにファイルを入れ替えるのは、それはそれで面倒くさいものです。
そこで、WebDriverの起動処理を分け、任意の場所にあるWebDriverを実行するようなコードを書いてみました。
Public Sub Sample2()
Dim pid As Long
Dim pno As Long: pno = 17556
pid = StartDriver(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
TerminateDriver pid
MsgBox "終了", vbInformation + vbSystemModal
End Sub
Private Function StartDriver(Optional ByVal BrowserName As String = "MicrosoftEdge", _
Optional ByVal PortNo As Long = 58082) As Long
'WebDriver実行
Dim DriverPath As String
Dim DriverName As String
Dim Options As String
Dim itm As Object, itms As Object
Dim pid As Long
Const DriverFolderPath As String = "C:\System\Driver"
Const EdgeDriverName As String = "MicrosoftWebDriver.exe"
Const IEDriverName As String = "IEDriverServer.exe"
pid = 0 '初期化
With CreateObject("Scripting.FileSystemObject")
Select Case LCase(BrowserName)
Case "microsoftedge", "edge"
DriverName = EdgeDriverName
Options = " --host=localhost --port=" & PortNo
Case "internet explorer", "ie"
DriverName = IEDriverName
Options = " /host=127.0.0.1 /port=" & PortNo & " /log-level=ERROR /silent"
Case Else: GoTo Fin
End Select
DriverPath = .BuildPath(DriverFolderPath, DriverName)
If .FileExists(DriverPath) = False Then GoTo Fin
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実行
With CreateObject("WbemScripting.SWbemLocator").ConnectServer.Get("Win32_Process")
.Create DriverPath & Options, DriverFolderPath, Null, pid
End With
Fin:
StartDriver = pid
End Function
Private Sub TerminateDriver(ByVal ProcessId As Long)
'WebDriver終了
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
WebDriverの起動と終了を自力で行うようにしたため、冗長なコードとなっていますが、これであれば好きなフォルダにWebDriverを置いてSeleniumBasicを使うことができます。
VBAマクロからEdgeを操作する機会もなかなか無いと思いますが、興味がありましたら、一度試してみてはいかがでしょうか。
2019/6/5 追記:
Windows 10 May 2019 Updateでも動作確認を行いました。



























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