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”しかないんですね。

VALUE SERVERログイン画面

しかも同じ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接続]というリンクが出てきて、更にクリックしてからようやく下記の画面が出てきます。
VALUE SERVERの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が必要です

つまらない単純作業をどれだけ繰り返しても文句を言わない優秀なパソコンさんがいるのですから、単純作業は出来る限り自動化したいものですね。