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 2013 アイコン一覧(X,Y,Z)

    ・Office 2013 アイコン一覧 NUM…

  2. Excel

    フォルダ内にあるExcelファイルをカウントするVBScript

    「フォルダ内 Excel 数える VBScript」といったキーワード…

  3. Office関連

    「文書のスタイル」を設定するWordマクロ

    Wordのオプション画面 → 文章校正 → Word のスペル チェッ…

  4. Office関連

    文書内の単語を単語ごとにカウントするWordマクロ

    Wordsコレクションを使って文書内の単語を列挙し、各単語がそれぞれい…

  5. Office関連

    OneNoteの指定したセクションをページごとに指定した形式で出力するマクロ

    今回はOneNoteの指定したセクションをページごとに指定した形式で出…

  6. Windows 10

    YouTubeの「歌ってみた」動画を非表示にするMicrosoft Edge拡張機能

    私はよくYouTubeで動画を見るのですが、公式PVを見たいだけなのに…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP