C#でSeleniumを簡単に動かす

C#

はじめに

C#のコンソールアプリケーションでSeleniumを動かす
WebDriverManagerを使用して、自動で最新のChromeをインストールし実行させる
これはwindowsで作成している

C#のコンソールアプリケーションを作成

適当なフォルダを作成し、コマンドラインで下記を実行してコンソールアプリケーションのプロジェクト作成をする

dotnet new console

ターミナル実行画像1

NuGetパッケージから必要なプラグインを導入する

プロジェクトのフォルダ上で下記を実行

dotnet add package Selenium.Support
dotnet add package WebDriverManager

ターミナル実行2

コマンドラインでパッケージを取りにいくのが面倒な人は
直接csprojファイルにItemGroupを書き込んでしまってもよい
下記画像のようになる

書き込み

しかしバージョンを最新にするためにもコマンドラインからプラグインを入れた方がよいかもしれない
また、バージョンを指定しなくても利用できないこともないが、互換性だったりなんだったりでプロジェクトに問題が出る場合がある
バージョンを指定するのがベストだろう

Program.cs コード

全体のコードは下記となる

using OpenQA.Selenium.Chrome;
using WebDriverManager;
using WebDriverManager.DriverConfigs.Impl;
using WebDriverManager.Helpers;

ChromeDriver chrome;
new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser);
var driverVersion = new ChromeConfig().GetMatchingBrowserVersion();
var driverPath = $"./Chrome/{driverVersion}/X64/";
var driverService = ChromeDriverService.CreateDefaultService(driverPath);

// ヘッドレスオプションを設定
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--headless"); // ヘッドレスモードを指定
chromeOptions.AddArgument("--disable-gpu"); // GPUを無効化(描画の問題を避けるため)
chromeOptions.AddArgument("--no-sandbox"); // sandboxモードの解除

// ChromeOptionsを使用してChromeDriverを起動
// ChromeOptionsを使用しない場合は chromeOptions を外す
chrome = new ChromeDriver(driverService, chromeOptions);

chrome.Url = "https://www.google.co.jp/";
// もしくは下記で移動
// chrome.Navigate().GoToUrl("https://www.google.co.jp/");

簡単に説明

これで、ChromeブラウザにマッチングするバージョンのChromeDriverを見つける

new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser);

マッチしたブラウザのバージョンを取得

var driverVersion = new ChromeConfig().GetMatchingBrowserVersion();

ドライバーパスの設定

var driverPath = $"./Chrome/{driverVersion}/X64/";

ドライバーサービスの作成となる

var driverService = ChromeDriverService.CreateDefaultService(driverPath);

オプションは様々なオプションがある
下記URLが参考となるだろう
https://www.selenium.dev/ja/

さいごに

これでC#でSeleniumを使ってブラウザを開くことができた
今回はヘッダレスで使用した
サイトによってはヘッダレスでは動かない場合もある

コメント