WSH(VBScript)でブラウザを自動操作する
Web運営をしているとレンタルサーバー、Webメール、WordPress、など様々な管理ページへログインする必要に迫られることが度々あります。
今どきのブラウザならユーザー名やパスワードを記憶してくれますし、それぞれのページを開くこと自体はさほど手間ではないかも知れませんが、それが毎日の作業となるとちょっと面倒になってきませんか?
ブラウザを自動操作したくなる具体例
例えばこのブログのために借りているVALUE SERVERの場合、SFTP (SSHで暗号化されたFTP通信)を使うために管理ページで[SSH登録]ボタンをクリックするという作業が定期的に必要になります。
セキュリティ上の理由により、管理ページで登録したIPアドレスからしかSSH接続が許されず、これの有効期限が30日間なのです。じゃあ30日に1度で良い、とも思えるのですが、プロバイダー側のIPアドレスが30日も経たずに変わってしまうこともあるため実際はもう少し頻繁にこの作業が必要になるんですね。
ついでにいうと、我が家ではpsftp.exe※1でレンタルサーバー上のファイルをダウンロードするバッチファイルを作っており、これをWindowsのタスクスケジューラーに登録することで、ほっといても毎日自動的にバックアップしてくれるようになっています。
(psftpの使用例については機会があれば記事にしたいと思っています。)
そのため、VALUE SERVER側で[SSH登録]を忘れてしまうと上述のバックアップ処理が失敗しちゃうんですね。
そんなわけで、今度は自動的にVALUE SERVERのコントロールパネルにログインし[SSH登録]ボタンを押下するスクリプトを作ってみました。これもタスクスケジューラーに登録すれば毎日自動的に[SSH登録]されるというワケです。
実行するのはWindows PCなので、WSH(Windows Scripting Host)の仕組みを使ったVBScriptです。
IEを自動操作してVALUE SERVERへログインしSSH登録するスクリプト
VBScriptなのでテキストファイルにコードを貼り付け、拡張子.vbsで保存するだけで使えます。
'******************************************************************************
'* VALUE-SERVER SSH登録の自動処理
'*
'******************************************************************************
user = "ユーザー名"
pass = "パスワード"
url = "https://e1.valueserver.jp"
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
Call ValueServerSSH(url, user, pass)
IE.Quit
'************************************************
'* VALUE-SERVERのコンパネへログインしSSH用のIPを登録する
'************************************************
Sub ValueServerSSH(url, user, pass)
IE.Navigate url & "/cp/admin.cgi"
Call WaitIE(IE)
'//ログイン情報入力
IE.document.getElementsByName("id")(5).value = user
IE.document.getElementsByName("pass")(5).value = pass
'//ログインボタンクリック
IE.document.getElementsByName("explain")(2).Click
Call WaitIE(IE)
'//左メニュー[お役立ちツール]-[SSH接続]をクリックした時のURLへ移動
IE.Navigate url & "/cp/admin.cgi?telnet=1"
Call WaitIE(IE)
'//SSH登録ボタンをクリック
IE.document.getElementsByName("ssh2")(0).Click
Call WaitIE(IE)
'//ログアウトボタンをクリック
IE.document.getElementsByName("clearcookie")(0).Click
Call WaitIE(IE)
End Sub
'************************************************
'* IEのページがロードされるまで待つ関数
'************************************************
Sub WaitIE(IE)
Do While IE.Busy Or IE.ReadyState <> 4
WScript.Sleep(1000)
Loop
End Sub
スクリプト上部の"ユーザー名"と"パスワード"はそれぞれVALUE SERVERのログイン情報を、"https://e1.valueserver.jp"にはVALUE SERVERの管理ページのURLを適宜入力してください。借りた時期とプランでURLが異なるためです。
VALUE SERVERへのログイン部分
VALUE SERVERの管理ページのログイン画面は下記のようにシンプルなのですが、中のソースを見るとログインIDやパスワードのタグにはHTMLのIDが割り振られておらず、NAME="id"しかないんですね。
しかも同じNAME="id"と付いたタグが6個もあります。そして、画面に表示されているのは6番目の"id"なのがわかったので、
IE.document.getElementsByName("id")(5).value = user
IE.document.getElementsByName("pass")(5).value = pass
というように指定しています。(配列は0から数えるので5を指定)
多少管理ページが修正されても対応できるようにするためには("id")(5)と決め打ちで書くよりも、配列の最後を取得してごにょごにょとか工夫したほうが良い気もしますが、まぁ基本的に自分しか使わないので良いかなぁと(;´∀`)
SSH登録のクリック部分
実際の管理ページでは、左側の[お役立ちツール]をクリックするとドロップダウンメニューのように[SSH接続]というリンクが出てきて、更にクリックしてからようやく下記の画面が出てきます。
でもそこまで自動操作せずとも、開くページが /cp/admin.cgi?telnet=1 であることはわかっているので、
IE.Navigate url & "/cp/admin.cgi?telnet=1"
として直接開いてしまいます。
そして最後に[SSH登録]という青いボタンをクリックですね。
IE.document.getElementsByName("ssh2")(0).Click
まとめ
VBAとかVBScriptに慣れていない方にとっては何のこっちゃって話ですし、慣れている方ならIEの自動操作くらいご存知な気もしますが、備忘録を兼ねて紹介してみました。
昨今はAmazonの Product Advertising API のようにサービス提供側がご丁寧にもAPIを提供してくれていることも増えましたが、そんなAPIなどないサイトのほうが圧倒的多数ですので、IEでの自動操作は手軽で貴重です。
※IE以外、例えばChromeとかを自動操作するためにはSeleniumやPuppeteerが必要です
つまらない単純作業をどれだけ繰り返しても文句を言わない優秀なパソコンさんがいるのですから、単純作業は出来る限り自動化したいものですね。