PR

C# + Selenium ためしてみた

マイクロソフトの公式ドキュメントでSeleniumを使ってC#でEdgeを操作しているサンプルがあったのでためしてみたので紹介。
NuGetからSelenium.WebDriverをインストールして使います。

スポンサーリンク

Seleniumとは?

SeleniumはWebブラウザを操作(決められた手順を実行)してテストを自動化するためのツール。
さまざまなブラウザ(Edge、Chrome、firefoxなど)に対応している。
また、Webサイトから自動で情報をあつめる作業(スクレイピング)によく利用されている。

スポンサーリンク

準備

まず、プログラムを実行するPCに対象のブラウザ(今回はEdge)がインストールされている必要があります。次にマイクロソフトのページからEdgeのバージョンにあったWebDriverをダウンロードして適当な場所に保存します。

Microsoft Edgeのバージョンを確認

Edge右上の「設定など」⇒「ヘルプとフィードバック」⇒「Microsoft Edgeについて」

Edge用WebDriverのダウンロード

以下のページからバージョンにあったドライバーをダウンロードする。

Microsoft Edge WebDriver (英語) |Microsoft Edge 開発者

自分の環境はWindowsなので「x64」を選択、ダウンロードしたzipを解凍して中の「msedgedriver.exe」を適当な場所に配置。

スポンサーリンク

テストした環境

Windows10
Visual Studio 2022(.NET6)
Microsoft Edge バージョン 101.0.1210.32
Microsoft Edge ドライバー バージョン: 101.0.1210.32

スポンサーリンク

Seleniumのインストール

NuGetからSelenium.WebDriverをインストールします。
VisualStudioでプロジェクトを作成したら以下の手順でインストールします。

プロジェクトの作り方は以下の記事にまとめてあります。

[C#]VisualStudio2022の使い方(コンソールアプリの作成)
インストールしたVisualStudio2022を使ってコンソールアプリを1から作ってみます。コンソールアプリはプログラマっぽい黒い画面で動くアプリです。 インストールがまだの方は、こちらの記事を参考にしてください。 Visual Stud...

メニュー「プロジェクト」⇒「NuGetパッケージの管理」を選択

NuGetのタブが開いたら、「参照」をクリック「Selenium.WebDriver」を探してクリックします。
検索ボックスに「Selenium」と入力するとすぐでてきます。

「インストール」ボタンをクリック

このメッセージが出てきた場合は「OK」ボタンをクリック。

プロジェクトにSelenium.WebDriverが追加されます。

スポンサーリンク

サンプルを改良して実行してみる

マイクロソフトのページにサンプルとして「Edgeを起動してBingのトップにアクセスし、検索ボックスにキーワードを入力して検索結果のページを表示する」というのがあったので試してみます。

ちょっと改良して検索結果のページタイトルをコンソールに出力してみた。
EdgeDriverの起動パラメータとしてWebDriverを保存したフォルダパスを渡すようにしてます。
Selenium4からDriverServiceにいれて渡すようになったみたい。

using OpenQA.Selenium;
using OpenQA.Selenium.Edge;

//msedgedriver.exeがあるフォルダパス
var driverPath = @"D:\AppPortable\WebDriver";
var service = EdgeDriverService.CreateDefaultService(driverPath);

//ヘッドレスモードで起動
var option = new EdgeOptions();
option.AddArgument("headless");

var driver = new EdgeDriver(service, option);
try {
    driver.Url = "https://bing.com";

    //検索ボックスにキーワードを入力して実行
    var input = driver.FindElement(By.Id("sb_form_q"));
    input.SendKeys("Microsoft Docs C#");
    input.Submit();

    //検索結果のページタイトルを取得して表示
    var e_result = driver.FindElement(By.Id("b_results"));
    var e_resultList = e_result.FindElements(By.CssSelector("li[class='b_algo']"));
    var titles = e_resultList.Select(e => e.FindElement(By.CssSelector("div[class='b_title']")).Text);
    foreach (var title in titles)
    {
        Console.WriteLine(title);
    }
}
finally {
    driver.Quit();
}
C# 関連のドキュメント - はじめに、チュートリアル ...
C# プログラミング ガイド | Microsoft Docs
C# docs - get started, tutorials, reference. | Microsoft …
C# の最初のステップ - Learn | Microsoft Docs
Documentacao do C# ? introducao, tutoriais, …
C# 文档 - 入?、教程、参考。 | Microsoft Docs
Microsoft
Microsoft Docsの文章:C#についての文章の引用元が …
Visual Studio 2022 バージョン 17.1 リリース ノート

いい感じ。

Chromeでもためしてみた

chromedriver.exeを入れてためしてみた。
「using OpenQA.Selenium.Edge;」を「using OpenQA.Selenium.Chrome;」に変えて、Edge~になってるのをChrome~にすればいいみたい。

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

//chromedriver.exeがあるフォルダパス
var driverPath = @"D:\AppPortable\WebDriver";
var service = ChromeDriverService.CreateDefaultService(driverPath);

//ヘッドレスモードで起動
var option = new ChromeOptions();
//option.AddArgument("headless");

var driver = new ChromeDriver(service, option);
try {
    driver.Url = "https://bing.com";

    //検索ボックスにキーワードを入力して実行
    var input = driver.FindElement(By.Id("sb_form_q"));
    input.SendKeys("Microsoft Docs C#");
    input.Submit();
}
finally {
    driver.Quit();
}

スクレイピングの参考にどうぞ

いろいろ試したみた記事になります。

[C#] 画像をダウンロードして保存する(HttpClient)
C#で画像をダウンロードして保存する方法を紹介します。System.Net.Http.HttpClientにあるGetAsyncメソッドでウェブからレスポンスを取得し、そこからReadAsStreamAsyncメソッドでストリームを取得して...
[C#]Seleniumの使い方(スクレイピングメモ)
C#+Seleniumをいろいろ試してみたのでメモ。Seleniumのインストールはこちらの記事を見てください。 画像のダウンロードについてはこちら、 はじめに まずはテンプレート的(ブラウザで指定したURLを開くだけ)なやつ。適時、ドライ...

参考ページ

WebDriver を使用して Microsoft Edge を自動化する - Microsoft Edge Developer documentation
Microsoft Edge で Web サイトまたはアプリをテストする方法、また WebDriver でブラウザーを自動化する方法。

C# 記事まとめページに戻る(他のサンプルコードもこちら)

C# プログラミング講座
C#についての記事まとめページです。開発環境VisualStudioのインストール方法や使い方、プログラミングの基礎知識についてや用語説明の記事一覧になっています。講座の記事にはすぐに実行できるようにサンプルコードを載せています。

コメント