Selenium WebDriver を使う (C#) (1)

WebDriver を使って、ブラウザ(Chrome)の起動と簡単な操作を行ってみます。
環境は Windows Visual Studio 2017 です。

WebDriver は NuGet で入れられます。Selenium.WebDriver と Selenium.Chrome.WebDriver を入れます。

f:id:venturenet:20181228154853p:plain

Selenium.WebDriver が主なライブラリです。これの他に、ドライバ(chromedriver.exe)が必要になります。それが Selenium.Chrome.WebDriver になります。


ブラウザを起動させるのは以下のようになります。

var options = new ChromeOptions();
options.AddExcludedArgument("ignore-certifcate-errors");
options.AddArgument("--disable-infobars");
options.AddArgument("--renderer-process-limit=1");
options.AddArgument("--user-data-dir=./profile");

var service = ChromeDriverService.CreateDefaultService();
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
            
var driver = new ChromeDriver(service, options);

driver.Quit();


ChromeOptions クラスで、Chrome に対するいくつかのオプションを指定することができます。例えば--renderer-process-limit で起動する Chrome のプロセス数を抑制しています。

ChromeDriverService は chromedriver.exe と対応するもので、それに対するオプションを指定することができます。

詳細は公式サイトで確認できます。

new ChromeDriver(service, options); のところで Chrome が起動します。Chrome とともに chromedriver.exe も起動します。
driver.Quit() で Chrome と chromedriver.exe が終了します。

なお、Chrome が異常終了したり、driver.Quit() を呼べないでプログラムが終了してしまった場合には、chromedriver.exe のプロセスが残ってしまうことがあり、この状態だと次に new ChromeDriver(service, options) したときに例外が出ることがあります。
そのような場合は、chromedriver.exe のプロセスを終了させて、しばらく待ってから実行するとうまくいくかもしれません。

また Chrome は頻繁にバージョンアップがありますが、古い chromedriver.exe ではうまく動かない場合が多々あります。chromedriver.exe はまめに最新版を入れたおいた方がよいでしょう。