【C#】Selenium で Keepa の 自動ログイン

スポンサーリンク

せっかくC#でSeleniumが使える事が分かったので、Keepaに自動ログインでも作ろうと思います。
C#だと 操作画面 (UI : UserInterface)が作れるからちょっと遊びたいと思います。
知人に作ったアプリの一部を抜粋して、参考にしてもらった人には、自分なりに応用してほしいと思います。

画面設計

操作画面はこんな感じにしたいと思います。

【txtID】:ID入力用
【txPW】:パスワード入力用(入力された文字は*で表示)
【btnLogin】:Keepaのログインを実行する

作成していく

Selenium をインポートする

NugetからSeleniumをインポートします。
前回の記事でインポートの方法は書いているので、参考にしてください。

【C#】Seleniumをつかってみる | 育児パパの人生備忘録 (t19488sns.com)

操作画面を作っていく

下記、操作画面をデザインしました。

パスワードは、入力された内容を入れたくありませんよね?
そこで txtPW のプロパティを変更します。

PasswordChar:*

こうすることで、入力された文字を任意の文字に表示できるようになります。

入力した文字は【*】で表示されます。

変数定義

今回はWebDriverのインスタンスを共通の変数として定義する。

IWebDriver _WebDriver;

クリックイベントを作成する(ログインボタン)

4つの関数を作って、自動ログインを作りたいと思います。

◆WebDriver解放
◆WebDriver初期化
◆Keepaへのアクセス
◆Keepaログイン

上記順番の処理で、実施できるようにクリックイベントを作成する。

private void BtnLogin_Click(object sender, EventArgs e)
{
    int res;

    //解放処理
    ReleaseWebDriver();

    //初期化
    res = InitialWebDriver();
    if (res != 0) return;

    //Keepaへアクセス
    res = AccessKeepa();
    if (res != 0) return;

    //Keepaログイン
    res = LoginKeepa();
    if (res != 0) return;
}

WebDriver解放処理

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

WebDriver初期化

private int InitialWebDriver()
{
    try
    {
        //サービス設定(コンソールを表示しない)
        ChromeDriverService service = ChromeDriverService.CreateDefaultService();
        /* ----- 今回は省略 ----- */

        //オプション設定(非表示にしたり、Userを選択したり)
        ChromeOptions options = new ChromeOptions();
        /* ----- 今回は省略 ----- */

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

        return 0;
     }
     catch (Exception ex)
     {
        Console.WriteLine(ex.Message);
        MessageBox.Show("初期化に失敗しました");
        return -1; //失敗
     }
}

Keepaへのアクセス

private int AccessKeepa()
{
    try
    {
        //Keepaにアクセス
        _WebDriver.Navigate().GoToUrl("https://keepa.com/#!");
        Thread.Sleep(5000);
        return 0;   //成功
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        MessageBox.Show("アクセス失敗しました");
        return -1; //失敗
    }
}

ウェイトは適当に入れています。変更できるようにパラメータ化するのもいいかもしれませんね。

Keepaログイン

private int LoginKeepa()
{
    try
    {
        IWebElement _Element;

        //userMenuPanel
        _Element = _WebDriver.FindElement(By.Id("userMenuPanel"));
        _Element.Click();
        Thread.Sleep(1000);

        //ユーザー名
        _Element = _WebDriver.FindElement(By.Id("username"));
        _Element.SendKeys(txtID.Text);
        Thread.Sleep(1000);

        //ぱすわーど
        _Element = _WebDriver.FindElement(By.Id("password"));
        _Element.SendKeys(txtPW.Text);
        Thread.Sleep(1000);

        //ログイン開始
        _Element.Submit();
        Thread.Sleep(5000);

        return 0;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        MessageBox.Show("ログインに失敗しました");
        return -1;
    }
}

補足 ( エレメントの見つけ方 )

ブラウザから、アクセスしたいエレメントを右クリックする。
検証を選択する。

すると、アクセスしたいエレメントが見つかる。

ここでもいいのかもしれないが、もう少し全体的なエレメントをクリックしたいので、ログインする時のエレメントは、「userMenuPanel」を選択する。

まとめ

今回はC#のSeleniumを使って、実践的な例としてKeepaの自動ログインを実施してみました。
今回の内容を理解すれば、ほかのサイトのログインも自動化することが出来ます。
パスワードをパラメータ化すれば、パスワードを覚える必要がなくなっていいかもしれませんね。

次回は、今回省略したオプション機能やサービス機能について、紹介したいと思います。

コメント

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