子供に提供しているるパソコンからScratchにログインしようとすると、頻繁にログインデータが消えていてアクセス出来なくなるらしい。
私のログイン名&パスワードは複雑なので、コピペでもしないと子供には打ち込めないよ・・・。
うーん、だったらVBSscriptで自動ログインしたら良いんじゃない?
IEを使った自動ログインなら、COMオブジェクトをCreateObjectメソッドから呼び出せば良いよね。
ほら簡単!
いつも使ってるChromeじゃないけどさ。
子供「IE嫌だ嫌だ!いつも使ってるのがイイ!Chromeがイイ!!」
いやいや、どっちでも同じでしょ・・・・
そもそも、ブラウザって何かも分かってないでしょ・・・?
言い出したら聞かないけどさ・・・。
仕方ないので調べてみたが、VBScriptからChromeを操作して自動ログインは無理だと思ってたが、不可能では無いらしい。
Seleniumに慣れたら遅いけど、まあ子供が使うには良さそうだ。
「出来ない」だけ言う大人に成長しないためにも、お父さんやってみるよ!
VBSからChrome経由で自動ログインする
前述通りCOMオブジェクトが使えない。
その場合は次のようにChromeを立ち上げる。
1 |
GC.Run ("chrome.exe --incognito -url [サイト]") |
まさかの力技!
で、先に結論。Scratchサイトへのログインするソースコードは次のようになる。RPA(Robotic Process Automation)のような方法だ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Dim objWshShell Dim GC Set objWshShell = WScript.CreateObject("WScript.Shell") Set GC = CreateObject("WScript.Shell") 'シークレットモードで起動 GC.Run ("chrome.exe --incognito -url https://scratch.mit.edu") objWshShell.AppActivate "chrome.exe" WScript.Sleep 4000 'Send ALT+F11(全画面) objWshShell.SendKeys "{F11}" WScript.Sleep 300 For i = 1 To 9 objWshShell.SendKeys "{Tab}" WScript.Sleep 300 Next objWshShell.SendKeys "{Enter}" WScript.Sleep 300 'Tabで移動 objWshShell.SendKeys "{Tab}" '[アカウント]をクリップボードにコピー Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "[アカウント]" & "|clip",0) WScript.Sleep 300 '貼り付け objWshShell.SendKeys ("^V") WScript.Sleep 300 'Tabで移動 objWshShell.SendKeys "{Tab}" '1000ms待機 WScript.Sleep 500 '[パスワード]をクリップボードにコピー Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "[パスワード]" & "|clip",0) WScript.Sleep 300 '貼り付け objWshShell.SendKeys ("^V") WScript.Sleep 300 'Enterで送信 objWshShell.SendKeys "{Enter}" WScript.Sleep 300 'Send ALT+F11(全画面終了) objWshShell.SendKeys "{F11}" |
最近のサイトはレスポンシブデザインなので一度最大画面にして、表示させるメニューが常にPC版になるようにしている。
また、シークレットモードで起動している理由は、ログイン情報のキャッシュにより動作不安定を排除するためだ。
で、Tabを9回入力して「サインイン」ボタンまで進み、ユーザ名/パスワードを入力している。
ネット上で発見できる国内のサンプルは似ていた。
アカウント・パスワードの入力はクリップボード経由で行い、全角の日本語でキー入力されてしまうサイト問題を避けている。
[アカウント]をクリップボードにコピーにするには、次のようにする。
1 |
Call CreateObject("Wscript.Shell").Run("%COMSPEC% /c echo " & "[アカウント]" & "|clip",0) |
貼り付けは次のようにする。
1 |
objWshShell.SendKeys ("^V") |
1000ms待機はこれ。
1 |
WScript.Sleep 1000 |
トラフィックの遅延もあるので「WScript.Sleep」の時間は長めに設定すること。
キーボード入力
エンターキーを入力するには次なように書く。
1 |
objWshShell.SendKeys "{Enter}" |
その他、色々な入力方法をまとめておく。
SendKeys を使って複数のキーを一度に送信でき、通常キーと特殊キーを複数組み合わせることもできる。
1 2 3 4 5 6 7 8 9 10 11 12 |
set WshShell = WScript.CreateObject("WScript.Shell") ''100を送信 WshShell.SendKeys "100" ''SHIFT+aを送信 WshShell.SendKeys "+a" ''CTRL+aを送信 WshShell.SendKeys "^b" ''ALT+aを送信 WshShell.SendKeys "%c" ''F1を送信 WshShell.SendKeys "{F1}" |
特殊キーの入力方法は次のようになっている。
キー | 設定方法 |
---|---|
SHIFT | + |
CTRL | ^ |
ALT | % |
これらを駆使して、Webサイトの仕様に従いマウス以外(キーボード)でログインする方法を考えて、それをVBScriptで動作させる。
VBSをWindowsアプリに見せかける
これは完全に趣味だが、Windowsアプリに見せかけたい。
そう言えば、10年以上前に執筆したなぁ・・・。
この方法で試してみる。
VBSをexeファイルに変換
MakeExe は、VBScript或いはJScriptをExeファイルに変換するためのツール。
使用方法は、スクリプトファイルをドラッグ&ドロップするだけ。
うん、今も動いた。簡単だね。
ICOファイルを用意する
Windowsアイコンだから、JPGやPNGではなくICOを使う。
「ICO 変換」などの検索キーワードでネットを探せば、複数ヒットする。
今回は次のページを利用した。
うん、これも簡単だね。
EXEファイルのアイコンを自分の好きなアイコンに変更する
以前使っていたのは、IconChangerは実行ファイル(*.exe)のアイコンを変更するツール。
使い方も簡単だね。
でも、アイコンは変わらなかった。
どうも上手くいかない場合がある・・というより、多くの場合、正常に動作しないらしい。
そこで「resource-hacker」を使うことにした。
英語は日本語に変更可能だけど、やることはEXEファイルをドラッグアンドドロップして右クリック。
「Replace Icon」を選んで画像を読み込むだけ。
おぉ、簡単だね。
まとめ
久しぶりにVBSを触った。
Chromeからのログインが出来ることを知らなかったが力技で何とかなるんだね。
昔調べた時は「COMオブジェクト無いから無理」と書かれたサイトが多かったが、先駆者は素晴らしい。