BUFFALO(バッファロー)製品ルーターを自動再起動処理
今回は、BUFFALO(バッファロー)製品のエアステーションやルータを自動で再起動する方法について解説します。
ちなみに私がPC環境で利用している無線ルーターはBUFFALO(バッファロー)製品の「WHR-G301N」です。
こちらの製品は販売終了していますが、LAN接続ソフト「クライアントマネージャ」を操作するため基本どのルーターでも対応可能かと思います。
こちら実際どういう場合に利用するかというと人それぞれですが主にルーターの自動再起動によるIPアドレスの変更などで利用されることが多いのではないでしょうか。
IPアドレスの変更であれば、コマンドプロンプトや他の方法でもできなくはないですが、こちらではVBAのIE制御入門サイトですので、VBAでどのように制御するのかを説明していきます。まずは、処理の流れを見ていきましょう。
- ①BUFFALO(バッファロー)製品ルーターの管理画面をIEで開く
- ②「管理設定」をクリックする
- ③「初期化/再起動」をクリックする
- ④「再起動」をクリックする
となります。
※BUFFALO(バッファロー)製品のルーターに特化した処理ですので、他製品の処理で対応していません
こちらは、完成したマクロになりますので、ご確認ください。
BUFFALO製品ルーターを自動再起動のマクロ
Sub sample()
Call ieBasic2("192.168.1.4", "root", "")
'管理設定をクリック
Set objFrame = objIE.document.frames
For i = 0 To objFrame.Length - 1
Set objFrame2 = objFrame(i).document.frames
For i2 = 0 To objFrame2.Length - 1
Set objFrameDoc = objFrame2(i2).document
For Each objTag In objFrameDoc.getElementsByTagName("a")
If InStr(objTag.outerHTML, "管理設定") > 0 Then
objTag.Click
Call ieCheck(objIE)
GoTo label01
End If
Next
Next i2
Next i
label01:
Call frameTagClick(objIE, "a", "再起動")
Call frameTagClick(objIE, "input", "再起動")
End Sub
実行結果
それでは、1つずつ見ていきましょう。
Call ieBasic2("192.168.1.4", "root", "")
ルーター管理画面のアクセスするとBASIC認証が表示されますので「ieBasic2サブルーチン」を利用してルーターの管理画面にログインしています。
一般的なルーターのIPアドレスは「192.168.1.1」ですが、もしルーターのアドレスが分からない場合は、BUFFALOのサポートセンターへお問い合わせください。
'管理設定をクリック
Set objFrame = objIE.document.frames
For i = 0 To objFrame.Length - 1
Set objFrame2 = objFrame(i).document.frames
For i2 = 0 To objFrame2.Length - 1
Set objFrameDoc = objFrame2(i2).document
For Each objTag In objFrameDoc.getElementsByTagName("a")
If InStr(objTag.outerHTML, "管理設定") > 0 Then
objTag.Click
Call ieCheck(objIE)
GoTo label01
End If
Next
Next i2
Next i
label01:
ルーターの管理画面が表示されたら、再起動画面まで移動していきます。
まず、「管理設定」をクリックする必要がありますが、非常にやっかいなサイト構成になっています。
以下は管理画面のトップページソースになります。
<frameset border="0" frameborder="0" framespacing="0" scrolling="no">
<frame name="top" src="/cgi-bin/cgi?req=tfr&tag=tag_setup" scrolling="no">
</frameset>
見て分かるようにフレームで構成されていますね。
ただし、これだけではなく、更に深いフレーム構成になっています。
1階層のフレームであれば「エクセルVBAでフレームの基本操作」のサブルーチンを利用することで簡単に処理できますが、「管理設定」をクリックするためには2階層のフレームを操作しなければなりません。
こちらの処理はその2階層の処理となります。
'管理設定をクリック
Set objFrame = objIE.document.frames
For i = 0 To objFrame.Length - 1
(省略)
Next i
こちらは、最初のフレームの数だけループ処理をしています。
Set objFrame2 = objFrame(i).document.frames
For i2 = 0 To objFrame2.Length - 1
(省略)
Next i2
こちらは、1階層のフレームから更にフレームを取得して、その数だけループ処理をしています。
Set objFrameDoc = objFrame2(i2).document
For Each objTag In objFrameDoc.getElementsByTagName("a")
If InStr(objTag.outerHTML, "管理設定") > 0 Then
objTag.Click
Call ieCheck(objIE)
GoTo label01
End If
Next
(省略)
label01:
こちらは、タグクリック処理で同じみの形ですね。
aタグの数だけループ処理をし、「管理設定」が含まれているaタグをクリックしています。
処理が終わると「GoToステートメント」で処理を終了させています。
Call frameTagClick(objIE, "a", "再起動")
Call frameTagClick(objIE, "input", "再起動")
ここまでくれば後は処理は簡単です。
処理は1階層のフレーム内での処理ですので、「frameTagClickサブルーチン」を利用して、aタグの「再起動」をクリック後、inputタグの「再起動」をクリックして再起動されます。
今回紹介した方法は、順序立てて処理を行ってきましたが、以下の方法でも自動再起動することができます。
Sub sample()
Call ieBasic2("http://192.168.1.4/cgi-bin/cgi?req=tfr&id=24", "root", "")
Call frameTagClick(objIE, "input", "再起動")
End Sub
すごく、シンプルになりましたね。
これは、再起動画面のURLに直接アクセスしています。
これにより途中のクリック処理を省いています。
このようにサイトの特性と処理の目的から簡素化することが可能ですので、1つ1つ処理するよりは効率よく処理をすることができます。
次の記事: VBAのIE操作でルーター(PR-S300SE)を再起動 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。