ぱっそ あ ぱっそ

個人的なメモをだらだらと。無保証。記事は随時書き直しています。

Airstationを毎日再起動する(go言語/go-rod)。メニューをたどり再起動まで編

概要

今回でいったん作業完了。端末管理メニューを呼び出して再起動を行うところまでを実行する

ステップ3:端末管理画面の呼び出し

ログイン後の画面はこんな感じ

トップ画面
右下の詳細設定をクリックしたいので、ソースからidを確認(panel_ADVANCED)、MustClick()でクリック処理を行う。

step3.go

package main

import (
    "fmt"

    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/launcher"
)

func main() {
    url := launcher.New().MustLaunch()
    browser := rod.New().ControlURL(url).MustConnect()
    defer browser.MustClose()

    page := browser.MustPage("http://192.168.11.1/login.html")
    page.MustWaitStable()

    html, err := page.HTML()
    fmt.Println(html,err)
    info := page.MustInfo()
    fmt.Println("URL:", info.URL, " Title:", info.Title)

    page.MustElement("[id='id_nosave_Password'").MustInput("acecat")
    page.MustElement("[id='id_login']").MustClick()
    page.MustWaitStable()

    html, err = page.HTML()
    fmt.Println(html,err)
    info = page.MustInfo()
    fmt.Println("URL:", info.URL, " Title:", info.Title)

    page.MustElement("[id='panel_ADVANCED']").MustClick()
    page.MustWaitStable()

    html, err = page.HTML()
    fmt.Println(html, err)
    info = page.MustInfo()
    fmt.Println("URL:", info.URL, " Title:", info.Title)
}

ステップ4:再起動の直前まで

管理画面はこんな感じ。画面右側は最初はステータス画面が表示されているので、再起動のメニューを表示するため、左側のメニューを選択する。

詳細設定

左側の[管理(id='AT_ADMIN')]をクリック(MustClick)して、表示されるサブメニュー[設定管理/再起動(id='AT_init_name')]をクリック(MustClick)する。これで画面右側に再起動用のボタンが表示される。

step4.go(追加分のみ)

   page.MustElement("[id='AT_ADMIN']").MustClick()
    page.MustWaitStable()
    page.MustElement("[name='AT_init_name']").MustClick()
    page.MustWaitStable()

    html, err = page.HTML()
    fmt.Println(html, err)
    info = page.MustInfo()
    fmt.Println("URL:", info.URL, " Title:", info.Title)

次は画面右側の再起動ボタンをクリック(MustClick)してあげれば完成。なのだけど、取得できたデータの中に、再起動ボタンに対応する部分(id='id_rebootBtn')が見つからない。

ステップ5:フレームの処理

見つからない原因は、画面がiframeにて分割されているから。表示されている画面左側のメニュー部分はそのまま操作できるが、右側の詳細メニューについてはHTMLのフレーム(frame)の中にあるため、ひと手間必要となる。 MustElementでframe要素を見つけ、MustFrame()で中のページを取り出せば、今までと同様に処理ができる。

step5.go(追加分のみ)

   frame := page.MustElement("[id='content_main']")
    page = frame.MustFrame()
    page.MustWaitStable()

    html, err = page.HTML()
    fmt.Println(html, err)
    info = page.MustInfo()
    fmt.Println("URL:", info.URL, " Title:", info.Title)

    page.MustElement("[id='id_rebootBtn']").MustClick()
    page.MustWaitStable()

    html, err = page.HTML()
    fmt.Println(html, err)

最後まで進めるとAirstationが再起動する。ここまでくれば、cronなどのスケジュール起動に設定することで、定期的な再起動の仕組みの出来上がり。

以上で一通りの処理が完了となる。 次回はおまけでGoを使ってみての気づきをメモする。