【C#】Seleniumをつかってみる

スポンサーリンク

知人に作ってほしいアプリがあると言われ、動画を見せてもらう。。。
ま、ま、まさかっっ!?!?!? [C#]でも[Selenium]がつかえるのか!?

という事で、今回はSeleniumをC#で使えるようになるまでの環境構築の備忘録です。

プロジェクトを作成する

いつものことながら、「Windows Form Application (.NET Framework)」を作成しましょう。
※コンソールアプリケーションでも問題はありません。

適当にプロジェクト名と保存するパスを指定する

【作成】を押すと最低限のプログラムが作成されます。

Seleniumをインストールする(WebDriver)

次に、プロジェクトにSeleniumをインストールします。
【ツール】→【NuGet パッケージ マネージャー】→【ソリューションの NuGet パッケージの管理】

Tab[NuGet – ソリューション] →【参照】→ [検索]に「selenium」と入力する。

次に「Selenium.WebDriver」をインストールする。
対象のプロジェクトにチェックを入れて、【インストール】をクリックする

表示されない人もいるかもしれないけど、下記が表示されたら【OK】をクリックする。

出力のタブに「====== 終了 =======」が表示されれば、インストール完了

インストールが完了すると、ソリューションエクスプローラーの参照に[WebDriver]が追加される。

Seleniumをインストールする(WebDriver.ChromeDriver)

今回は【Google Chrome】を操作していきたいので、Chromeのドライバーをインストールします。
先ほどと同様に NuGet ソリューション から「selenium」を検索します。
そして、「Selenium.WebDriver.ChromeDriver」をインストールします。

※今回は、 ソリューションエクスプローラーの参照に追加されない。

実際に使ってみる

環境を構築できたので、簡単に実施してみたいと思います。

忘れてはいけないのが、使用するネームスペース( NameSpace )のusingです。

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

上記二つを追加しよう!!

★下記、20220612追記★

そして、フォーム内で使える変数を定義します。

private IWebDriver _WebDriver;

Googleにアクセス(指定のURLに移動する)

流れとしては、WebDriverのインスタンスがあれば、いったん開放して、再度インスタンスの生成。
そして、URLにアクセスする。
【Googleにアクセス】をクリックしたときの処理を紹介します。

private void btnGoogle_Click(object sender, EventArgs e)
{
    if (_WebDriver != null)
    {
        _WebDriver.Quit();      //すべて閉じる
        _WebDriver.Dispose();
        _WebDriver = null;
        Application.DoEvents(); //気分的にちょっと。。。
    }

    //サービス設定(コンソールを表示しない)
    ChromeDriverService service = ChromeDriverService.CreateDefaultService();
    service.HideCommandPromptWindow = true;

    //オプション設定(非表示にしたり、Userを選択したり)
    ChromeOptions options = new ChromeOptions();
    //options.AddArgument("--headless");    //非表示
    options.AddArgument("--start-maximized");   //最大化(Chromeのみ?)

    //instance生成
    _WebDriver = new ChromeDriver(service, options);

    //URLにアクセス
    _WebDriver.Navigate().GoToUrl("https://www.google.co.jp/");
}

Googleの検索を行う

【検索】ボタンをクリックされたら、横にあるテキストボックスの内容をGoogleの検索欄に記入し、検索をかける。

private void btnSearch_Click(object sender, EventArgs e)
{
    //エレメント取得
    IWebElement _element = _WebDriver.FindElement(By.CssSelector(".gLFyf.gsfi"));

    //入力
    _element.SendKeys(txtSearch.Text);

    //検索
    _element.Submit();
}

今回は、詳細の説明は省きますが、FindElement関数を使って、エレメント( Element )を取得して、エレメントに対して適切な処理を行う。

Selenium終了処理

【終了】ボタンを押した時の処理を紹介する。
ちゃんとSeleniumを終了させないとChromeが起動し続けている為、しっかりとインスタンスの開放を行う事。

この処理は、起動時にインスタンスがあった時に行っていた処理と同じです。
※関数にした方がいいですが、今回は書きます。

private void btnEnd_Click(object sender, EventArgs e)
{
    if (_WebDriver != null)
    {
        _WebDriver.Quit();      //すべて閉じる
        _WebDriver.Dispose();
        _WebDriver = null;
    }
}

Quit関数で、表示しているChromeのウィンドウをすべて閉じます。
Dispose関数で開放します。

ウィンドウが閉じる時の処理

最後に気にすべきことがあります。それは、ウィンドウを閉じる時です。
この時も【終了】ボタンと同じ処理が走るようにしましょう。
※何度も言いますが、関数にした方がいいですw

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (_WebDriver != null)
    {
        _WebDriver.Quit();      //すべて閉じる
        _WebDriver.Dispose();
        _WebDriver = null;
    }
}

さいごに

C#でSeleniumをやってみました。
NuGetからパッケージのインストールを行うと今まで出来なかったことが出来るようになるので、楽しくなりますね!!!!
次回は、このSeleniumを使ってKeepaのログインを作りたいと思います。

コメント

タイトルとURLをコピーしました