LoginSignup
6
4

More than 1 year has passed since last update.

【正式版】Selenium4のEdgeDriverでChromium版MicrosoftEdgeを動かす(IEモードもできるよ♪)

Last updated at Posted at 2021-11-06

はじめに

以前こんな記事を書きました:
【α版】Selenium4のEdgeDriverでChromium版MicrosoftEdgeを動かす

が、ついにSelenium4が正式リリースされたので改めて整理しなおしてみました!
※動かせた時の感動は省略
※実際、α版と比べるとコーディングはガラッと変わってます

やったこと

Chromium版MicrosoftEdgeの取得

こちらからダウンロード&インストール

NuGet

Selenium系の参照
image.png

注意

  • お手元の Edge のバージョンに対応した driver を取得する必要があります。
    • MsEdgeでこのURLを叩けばOK:edge://settings/help
    • より高いバージョンのEdge(β版など)を動かしたい場合はこちらからmsedgedriverをダウンロード
      image.png

ソース

以前書いた記事と比較すると、より自然な実装ができるようになりました。嬉しい!
ヘッドレスモードも画面ショットも問題ないですよ!

// Headlessモードはこんな感じ:
// var options = new EdgeOptions();
// options.AddArgument("--headless");
// using (var driver = new EdgeDriver(options))

using (var driver = new EdgeDriver())
{
    var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5));

    driver.Navigate().GoToUrl("https://www.google.com");

    var q = driver.FindElement(By.Name("q"));
    q.SendKeys("Chromium");
    q.Submit();

    wait.Until(ExpectedConditions.TitleIs("Chromium - Google 検索"));
    ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile($"{DateTime.Now:yyyyMMddHHmmss}.png");
}

本来EdgeDriverクラスはレガシーEdge用で、
α版時点ではEdgeOptions.UseChromiumを指定する必要があったのですが、

namespace OpenQA.Selenium.Edge
{
    public class EdgeDriver : ChromiumDriver
}

てな具合でEdgeDriverはChromium版Edge専用クラスと生まれ変わったようです。

IEモード

IEモードについては以下の通りです。

NuGet

IEDriverが必要なんですね。
image.png

ソース

var options = new InternetExplorerOptions
{
    AttachToEdgeChrome = true,
    EdgeExecutablePath = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
};

using (var driver = new InternetExplorerDriver(options))
{
    // 略
}

こんな感じでアドレスバーにIEマークが表示されればOKです。
image.png

注意点

  • IEの事前設定が必要です(Seleniumあるある)
    • 拡大率を100%にしましょう
    • インターネットオプション → セキュリティですべてのゾーンで「☑保護モードを有効にする」をしましょう
  • msedge のプロセスが既に動作しているときに実行するとIEモードで動いてくれません
    • 実行時はmsedgeのプロセスをKILLしましょう
      IEDriverServer.exe のバージョン 4.0.0 で現象が改善されることを確認しました。
      ※もともと、msedge のプロセスが存在する状態で実行すると「This is the initial start page for the WebDriver server.」と表示されたまま動かず、タイムアウトしてしまう現象が発生していました。
      image.png

以前までは…

こちらの記事の通りにコーディングすると動きましたが、正式版では実行時エラーとなります:
Seleniumを使ってChromium版EdgeのIEモードを動かしてみた

気づいたこと

こんな変更があったりするので、バージョン上げるときは要注意です。

// Before ビルドエラー
var q = driver.FindElementByName("q");
// After
var q = driver.FindElement(By.Name("q"));

詳細はこちら:How to upgrade to Selenium 4

おわりに

Seleniumさん、引き続きよろしくな!

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4