自動ログインツール
以前のやっていた案件でJenkinsを使用したビルドを行っており、本番環境へリリースするためにjenkinsからリリースセットをダウンロードしてデプロイを行っていました。その際に自動でログインを行い対象のリリースファイルをダウンロードするようなツールを用意したので、その備忘録として記事を作成しました。
なお今回はjenkinsではなく、ニコニコ動画へのログインを試みるという処理になります。
処理の内容としては、以下のようになっています。
- ブラウザを起動
- URLを入力し、Enterキーを押下
- ユーザIDとパスワードを入力
- ログインを押下
login.vbs
Option Explicit
'定数および変数の定義
'ログインURL
Const LOGIN_URL = "https://account.nicovideo.jp/login"
'ユーザID
Const USER_ID = "admin"
'パスワード
Const USER_PASS = "adminpass"
'メインの処理
Dim WshShell
Set WshShell = Wscript.CreateObject("WScript.Shell")
'cscript.exe で強制実行
Call CscriptRun
'ログインする
Call main
Set WshShell = Nothing
'=====================================================================================
'メイン処理
'=====================================================================================
Sub main()
Wscript.StdOut.WriteLine "------"
Wscript.StdOut.WriteLine "ログインして、APリリースセットのダウンロードを開始します。"
Wscript.StdOut.WriteLine "アクティブなウィンドウ(Chrome)を対象にして処理を行うため、何も操作せずにお待ちください。"
'ログインに成功するまでループ(必要に応じて)
'Do While Not WshShell.AppActivate("ダッシュボード", True)
Call login
'Loop
End Sub
'=====================================================================================
Sub login()
'Chromeがアクティブかを確認するためのフラグ
Dim activeFlg
Wscript.Sleep 2000
'ログインエラーで無い場合
If Not WshShell.AppActivate("ログインエラー", True) Then
'クロームを起動する(3:最大化で最前面)
WshShell.Run "Chrome.exe", 3
'Chromeをアクティブにする
Do While Not activeFlg
activeFlg = WshShell.AppActivate("新しいタブ", True)
Loop
Else
WshShell.SendKeys "{F6}", True
End If
Wscript.Sleep 2000
'ログインURLをアドレスバーに貼り付け
WshShell.SendKeys LOGIN_URL
Wscript.Sleep 500
'ログイン画面に遷移
WshShell.SendKeys "{Enter}", True
'ログイン
Wscript.Sleep 2000
'ユーザ名を入力
WshShell.SendKeys "{Tab}", True
WshShell.SendKeys "{Tab}", True
WshShell.SendKeys USER_ID, True
Wscript.Sleep 2000
WshShell.SendKeys "{Tab}", True
'パスワードを入力
WshShell.SendKeys USER_PASS, True
Wscript.Sleep 2000
WshShell.SendKeys "{Tab}", True
Wscript.Sleep 1000
'ログインボタン押下
WshShell.SendKeys "{Enter}", True
Wscript.Sleep 500
End Sub
'=====================================================================================
'cscript.exe で強制実行
'拡張子(.vbs)が wscript.exe に紐づいている場合、cscript.exe で起動しなおす
'※デフォルトでは wscript.exe に紐づいている
'cscript.exe の実行終了後 pause で一時停止する
'=====================================================================================
Sub CscriptRun()
Const WINDOW_ACTIVE = 1
Dim WshShell
Dim strParam
Dim item
If LCase(Right(Wscript.FullName, 11)) <> "cscript.exe" Then
Set WshShell = CreateObject("WScript.Shell")
strParam = " "
For Each item In Wscript.Arguments
If InStr(item, " ") < 1 Then
strParam = strParam & item & " "
Else
strParam = strParam & Dd(item) & " "
End If
Next
'ウィンドウをアクティブに表示する。
WshShell.Run "%comspec% /c cscript.exe //Nologo " & Dd(Wscript.ScriptFullName) & strParam & " & pause", WINDOW_ACTIVE, True
Set WshShell = Nothing
Wscript.Quit
End If
End Sub
'=====================================================================================
' 文字列を " で囲む関数
'=====================================================================================
Function Dd(strValue)
Dd = """" & strValue & """"
End Function
'=====================================================================================
備考
色々なWebサイトへのログインとして応用できるかと思っていましたが、ユーザIDを入力時にかな入力になっていた場合は半角/全角の切り替えができなかったり、ログインボタンがマウスクリックでしか反応しなかったりするサイトもあり、汎用には向かないということが分かりました。