せっかく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の自動ログインを実施してみました。
今回の内容を理解すれば、ほかのサイトのログインも自動化することが出来ます。
パスワードをパラメータ化すれば、パスワードを覚える必要がなくなっていいかもしれませんね。
次回は、今回省略したオプション機能やサービス機能について、紹介したいと思います。

業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。



コメント