Windows 10

【2019年6月版】SeleniumBasicでMicrosoft Edgeを操作してみました。

2015年と2018年にSeleniumBasicを使ってMicrosoft Edgeを操作する方法について記事を書きました。

Windows 10 May 2019 Updateが公開され、Edge周りの環境が変わったので、改めて動作確認したいと思います。

動作確認環境

  1. Microsoft Windows 10 Pro バージョン 1903 (OS ビルド 18362.145) 64ビット版
  2. Excel 2016 MSO (16.0.4849.1000) 32ビット版
  3. Microsoft Edge 44.18362.1.0
  4. Microsoft EdgeHTML 18.18362
  5. 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を操作したいという方は一定数おられるようです。

関連記事

  1. Office関連

    VBAで○○を禁止したい!・・・と思う前に。

    Office系Q&Aサイトを見ているとたまに出てくるのがこの質問。…

  2. Office関連

    [PowerPoint]テーブルを「変形」して値の変化を強調

    前回の記事と同じく、Insider版のバージョン 1903 (ビルド …

  3. Office関連

    文字列を横方向に移動するWordマクロ(WordBasic編)

    いつもお世話になっているWord MVPの新田さんが、まるでカニの動き…

  4. Windows 10

    Microsoft Edgeのお気に入りをHTML形式でインポート・エクスポートする。

    以前当ブログでMicrosoft Edgeのお気に入りを編集する方法に…

  5. Office関連

    外部アプリケーションのコンボボックスの内容を取得するVBAマクロのサンプル

    Q&Aサイトに下記質問がありました。(この質問も何となく似たような…

  6. Office関連

    Visio Onlineで図の作成・編集ができるようになりました。

    しばらくVisio Onlineを使っていなかったので気が付かなかった…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP