ぱっそ あ ぱっそ

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

Airstationを毎日再起動する(go言語/go-rod)。最初の一歩編

概要

今回はログイン画面を取得し、ログインを完了するところまでを行う。

ステップ1:ブラウザの呼び出し、ページの取得と確認

まずはログイン画面を取得するところから始める。今後、プログラムからページを操作するにしても、中身が見れないと進めるのが困難なので、取得したデータを確認できるよう取得したデータを表示するところまで進める。

step1.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.Info()
    fmt.Println("URL:", Info.URL, " Title:", Info.Title)
}

対象の機器のipは192.168.11.1を想定。初めて実行する前にはgo mod init step1.go/go mod tidyしてモジュールを利用できるようにする。 参考:go mod完全に理解した

1行目と2行目でヘッドレスのブラウザを読み出し、4行目で指定したURLの内容を読み込む。後半では読み込んだ変数pageのHTML(テキスト本体)と、ページの情報(URLとタイトル)を表示するもの。実行するとログイン画面の内容が確認できる。 3行目のdefer文はGo言語の遅延関数というもので、今回ならmain関数が終了される際になって実行されるもの。今回の例では気にしなくていいが、途中で処理が中断してしまうような場合でもこれを使うことで確実にclose処理を行うことができる。

MustWaitStableはページの読み込みを待つために記載。この点については後日詳細に書きたい。

ステップ2:要素へのアクセス。テキストボックスへの値の代入。クリック処理

ステップ1で取得したデータをもとに、パスワードを入れるテキストボックス(ID='id_nosave_Password')とログインの際のボタン(id='id_login'])を確認、MustElementを使ってElementを取得しつつ、値を代入したりクリックしたりしてログイン処理をプログラムで行う。うまくいけば、二回目のpage.HTML()とpage.Info()はログイン後のものを返すはず(もちろんパスワードはダミー)

step2.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.Info()
    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.Info()
        fmt.Println("URL:", Info.URL, " Title:", Info.Title)
}

これでログイン後の画面を表示できた。 次回でいったん再起動ができるところまで進める予定