Chromiumベースの新しいMicrosoft EdgeブラウザをSeleniumBasicを使って自動操作させWebスクレイピングする方法

2020年1月15日にChromiumベースの新しいMicrosoft Edgeがリリースされました。
SeleniumBasicを使って早速Web自動化(スクレイピング)を試してみます。

新しいMicrosoft Edgeをインストール

Chromiumベースの新しいMicrosoftEdgeをダウンロードします

SeleniumBasicをインストール

SeleniumBasicをインストールしていないなら、このリンクからインストールします。

新しいEdge Driverをインストール

先程上のリンクからインストールしたMicrosoft Edgeは最新のものですが、Edge Driverは更に先のバージョンに対応されたものが公開されています。

何も考えず最新Edge Driverをインストールしてきて実行しようものなら以下のエラーが出てきてテストが終了します。

実行時エラー ’33’

SessionNotCreatedError
session not created: This version of MSEdgeDriver only supports MSEdge version 81

一度Microsoft Edgeを立ち上げ、バージョンを確認します。

バージョン 79.0.309.65であることが確認できました。
バージョンは刻々と更新されているため、以下のバージョン表記は使用中のEdgeバージョンと置き換えて読んでください。

このリンクからMicrosoft Edge用のWeb Driverをダウンロードします。

ZIPを展開すると以下のファイルが入っています。

このファイルをSeleniumBasicをインストールしたフォルダにコピーします。
通常は %LOCALAPPDATA%\SeleniumBasic にインストールされていると思います。

VBAが実行できる環境を立ち上げます。
以下はExcel VBAで説明します。

参照設定で Selenium Type Libraryを参照します。

更新が止まっているSeleniumBasicで最新のMicrosoft EdgeとMicrosoft Edge webdriverを使う方法

SeleniumBasicはかなり古いプロダクトで、2016年3月を最後に更新が止まっています。
古いMicrosoft Edgeには対応しているのですが、新しいMicrosoft Edgeには対応していません。

対応していないのは、そもそもMicrosoft EdgeをコントロールするためのWebDriverの実行ファイル名が変わってしまっているためEdgeをコントロールする際のexeのフルPathを指定してあげる必要があります。

以下のサンプルコードでは、環境変数 %LOCALAPPDATA% の値を取得して、SeleniumBasic標準のインストールパスを元に新しい新しいMicrosoft Edgeに対応したWebdriverへのフルPathをSetBinaryで指定しています。

コード(>は半角に置き換えてください)

Option Explicit

Sub TestNewEdge()
    Dim driver As New Selenium.EdgeDriver
    Dim elmLoop As WebElement
    Dim sTmp As String
    With driver
        .SetBinary Environ$("LOCALAPPDATA") & "\SeleniumBasic\msedgedriver.exe"
        .Get "http://www.yahoo.co.jp/"
        With .FindElementByCss("form > fieldset > span")
            .FindElementByCss("input").SendKeys "Selenium"
            .FindElementByCss("button").Click
        End With
        For Each elmLoop In .FindElementsByClass("sw-CardBase")
            sTmp = elmLoop.FindElementByCss("a.sw-Card__titleInner").Attribute("onmousedown")
            sTmp = Mid$(sTmp, InStr(sTmp, "'") + 1)
            sTmp = Left$(sTmp, InStr(sTmp, "'") - 1)
            sTmp = Replace(sTmp, "%3A", ":")
            Debug.Print elmLoop.FindElementByCss("h3").Text
            Debug.Print , sTmp
        Next
        .Wait 15000
        .Quit
    End With
End Sub

実行結果

コメント

タイトルとURLをコピーしました