自動ログインしたいならブックマークレットじゃなくて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で書いてみることにする。
 
参考にしたサイトはこれ↓
 

 

 

作成したvbsはこれ↓

 
InputAndClick
Sub InputAndClick
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://*****(URLはごめんね)*****.portal"
WScript.Sleep 2000
'ie.Document.getElementByName("user")(0).Value = "**(名前もごめんね)**"
'ie.Document.getElementByName("password")(0).Value = "***(パスワードもごめんね)***"
ie.Document.getElementsByName("form")(0).submit
End Sub

 

僕がログインしたい社内ポータルサイトのフォームは、
idが振られていなくって、nameが振られていた。
 
なので、
"getElemenById"じゃなくて、"getElementByName"を使ってます。
 
あと、ログインIDとパスワードの入力については、
IEのオートコンプリートに任せることにした。
※IDとPASSはコメントアウトしたよ。
 
ただ、実行してみたところ、こんなエラーがでてしまった。。↓
「起動されたオブジェクトはクライアントから切断されました。」
 
デバッグの参考にしたサイトはこれ↓
 

 

 

 
“ユーザーアカウントでユーザーアカウント(UAC)を使ってコンピュータの保護のチェックを外すと正常に動作しますので、この対応で逃げたいと思います。”

 

これはつまり、
コントロールパネル>ユーザーアカウント制御設定の変更
⇒レベル最下部まで落とすということ。
 
設定を変えたら、直った。
深いことは知らん。
 
 
 

もっと使いやすくする

IntraLogin.vbsというファイルがデスクトップにできたので、
それをダブルクリックすれば、社内ポータルサイトに自動ログインできるようになった。
 
そして、
このファイルをIEのお気に入りにドラッグ&ドロップして、
ブックマークっぽくした。
 
ただ、さっきのコードのままだと、
「vbsをクリックする度に、新規ウィンドウが開かれる」
のが気に食わん。
 
ということで、
「ウィンドウは増やさずに、新規タブで開かれる&ログインされる」
ように書き換えた。↓
 
InputAndClick
Sub 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 = objWindow
        End If
    Next
    Set objShell = Nothing
'新規ウィンドウでは開かない
'Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
'新規タブで開く
ie.Navigate2 "http://*****(URLはごめんね)*****.portal", &H800
WScript.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 = objWindow2
        End If
    Next
    Set objShell = Nothing
ie.Document.getElementsByName("form")(0).submit
End Sub
 
以上