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 "https://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
実行結果
2020/12/18 更新 最新のEdgeで動かない時は
サンプルが動かなくなっていたので調査してみました。
どうやら SetBinaryが何らかの不具合が発生している様です。
msedgedriver.exe を edgedriver.exe という名前で上書きし、 SetBinaryをコメントアウトしたら動くようになりました。
なぜSetBinaryすると動かなくなるのかはさらに調査してみないとわからないですね。
コメント
コメントというより質問になってしまい、申し訳ないです。
上記手順を基に、プログラムを作成しているのですが、
「.Get “http://www.yahoo.co.jp/”」
を実行した際に、タイムアウトエラーが発生してしまいます。
原因がわからず、ChromiumのMicrosoft Edgeを使用している方が検索できなかったため、
確認させていただいております。
ご存じでしたら、教えていただけないでしょうか?
Microsoft Edge:87.0.664.57
*エラー内容*
実行時エラー ’21’
TimeoutError
The driver failed to open the listening port 127.0.0.1:49410 within 10s
試しにChromeで実行してみたのですが、Chromeは無事開くことができました。
気が付くのが遅くなってしまい申し訳ないです。
SetBinaryがうまく機能していないようで、とりあえず対応とはなりますが、
追記の対応で動くようにはなりました。