概要
今回でいったん作業完了。端末管理メニューを呼び出して再起動を行うところまでを実行する
ステップ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を使ってみての気づきをメモする。