自動ログインしたいならブックマークレットじゃなくてVBSを使え
よく使うWebサイトに、なんとか自動でログインするためにやったこと。
やりたいこと
- 会社のポータルサイトへのログインを自動化したい
- できればブックマークバーに置いてあるお気に入りを差し替えたい。(デスクトップにショートカットを置くとかはイヤ。)
- あくまで今まで通り、追加で特別な操作はなしで、ログインを自動でさせたい。
現状、社内ポータルサイトにアクセスすると、
一応「ログインID」と「パスワード」は、
IEブラウザのオートコンプリート機能で補填されていて、あとはEnterを打つだけ
そう、
「あとはEnterを打つだけ」
なんだけど、
セッションが切れる毎に(PC,ブラウザ,タブを落とすたびに,新しいタブで開くたびに)
毎回まいっかいログイン画面が出てくる。。
イライライライラ・・・
会社人生あと30年。
あと何回"無駄なEnter"を打てばいいんだ。。
ブックマークレットで試してみる
いろいろ調べた結果、まずはじめに検討したのはブックマークレット。
でも、僕の欲している完全自動化とは程遠かった。。
だって、ワンクリックで済まないんだもん。
シンプルに3秒後にHelloWorldを表示できる。うまくいった。↓
javascript:function login(){alert("hello%20world");};setTimeout("login()", 3000);
helloworldを2回表示できる。1個目をOKしたら3秒後にもっかい。うまくいった。↓
javascript:alert("hello%20world");function login(){alert("hello%20world");};setTimeout("login()", 3000);
サイト表示後だと、helloworld出てこない。うまくいかん…↓
javascript:document.location = "https://www.yahoo.co.jp/";function login(){alert("hello%20world");};setTimeout("login()", 3000);
どうやら、
①サイトを表示
②あれこれする
という①②を両方セットにしたブックマークレットは、作れないらしい。
参考にしたサイトはこれ↓
はい、ブックマークレットの検討はボツ。次。
VBSを試してみる
いままでみたいに、ブックマークをクリックする方法が使えないので、
当初の検討からは外していたんだが、、
しゃーないのでVBSで書いてみることにする。
参考にしたサイトはこれ↓
InputAndClickSub InputAndClickSet ie = CreateObject("InternetExplorer.Application")ie.Visible = Trueie.Navigate "http://*****(URLはごめんね)*****.portal"WScript.Sleep 2000'ie.Document.getElementByName("user")(0).Value = "**(名前もごめんね)**"'ie.Document.getElementByName("password")(0).Value = "***(パスワードもごめんね)***"ie.Document.getElementsByName("form")(0).submitEnd Sub
僕がログインしたい社内ポータルサイトのフォームは、
idが振られていなくって、nameが振られていた。
なので、
"getElemenById"じゃなくて、"getElementByName"を使ってます。
あと、ログインIDとパスワードの入力については、
IEのオートコンプリートに任せることにした。
※IDとPASSはコメントアウトしたよ。
ただ、実行してみたところ、こんなエラーがでてしまった。。↓
「起動されたオブジェクトはクライアントから切断されました。」
デバッグの参考にしたサイトはこれ↓
“ユーザーアカウントでユーザーアカウント(UAC)を使ってコンピュータの保護のチェックを外すと正常に動作しますので、この対応で逃げたいと思います。”
これはつまり、
コントロールパネル>ユーザーアカウント制御設定の変更
⇒レベル最下部まで落とすということ。
設定を変えたら、直った。
深いことは知らん。
もっと使いやすくする
IntraLogin.vbsというファイルがデスクトップにできたので、
それをダブルクリックすれば、社内ポータルサイトに自動ログインできるようになった。
そして、
このファイルをIEのお気に入りにドラッグ&ドロップして、
ブックマークっぽくした。
ただ、さっきのコードのままだと、
「vbsをクリックする度に、新規ウィンドウが開かれる」
のが気に食わん。
ということで、
「ウィンドウは増やさずに、新規タブで開かれる&ログインされる」
ように書き換えた。↓
InputAndClickSub InputAndClick'オブジェクトを格納する変数Dim objShell, objWindow'シェルのオブジェクトを作成するSet objShell = CreateObject("Shell.Application")'ウインドウの数だけまわすぞFor Each objWindow In objShell.Windows'HTMLDocumentだったらIf TypeName(objWindow.document) = "HTMLDocument" Then'そのHTMLDocumentをこの後操作するIEオブジェクトとするSet ie = objWindowEnd IfNextSet objShell = Nothing'新規ウィンドウでは開かない'Set ie = CreateObject("InternetExplorer.Application")ie.Visible = True'新規タブで開くie.Navigate2 "http://*****(URLはごめんね)*****.portal", &H800WScript.Sleep 2000'ie.Document.getElementByName("user")(0).Value = "**(名前もごめんね)**"'ie.Document.getElementByName("password")(0).Value = "***(パスワードもごめんね)***"'今操作対象のieオブジェクトは、開いたタブの一個手前にあたっている'ので、もっかいHTMLDocumentを取り直す。'URLとタイトルを表示させるテスト'オブジェクトを格納する変数Dim objShell2, objWindow2'シェルのオブジェクトを作成するSet objShell2 = CreateObject("Shell.Application")'ウインドウの数だけまわすぞFor Each objWindow2 In objShell2.Windows'HTMLDocumentだったらIf TypeName(objWindow2.document) = "HTMLDocument" Then'そのHTMLDocumentをこの後操作するIEオブジェクトとするSet ie = objWindow2End IfNextSet objShell = Nothingie.Document.getElementsByName("form")(0).submitEnd Sub
以上