Go + WebDriver でブラウザ操作を自動化する

  • 41
    いいね
  • 0
    コメント

Go + WebDriver でブラウザ操作を自動化してみたメモ。

ライブラリは sclevine/agouti を使ってみました。

sclevine/agouti は、Selenium 公式が提供している Go のクライアントライブラリではない(まだそういったものは存在してなさそう)けど、Selenium Server 等さえインストールしておけば、うまいことよしなにしてくれる代物。
他の似たようなライブラリと比べてシンプルで分かりやすいように思いました。

下記、各ブラウザ毎のサンプルコード。
qiita.com にアクセスしてスクリーンショットを撮り保存する処理。

Firefox

$ brew install selenium-server-standalone
$ go get github.com/sclevine/agouti
$ go run main.go
// main.go
package main

import (
    "github.com/sclevine/agouti"
    "log"
)

func main() {
    driver := agouti.Selenium()
    if err := driver.Start(); err != nil {
        log.Fatalf("Failed to start driver:%v", err)
    }
    defer driver.Stop()

    page, err := driver.NewPage(agouti.Browser("firefox"))
    if err != nil {
        log.Fatalf("Failed to open page:%v", err)
    }

    if err := page.Navigate("http://qiita.com/"); err != nil {
        log.Fatalf("Failed to navigate:%v", err)
    }
    page.Screenshot("/tmp/firefox_qiita.jpg")
}

Chrome

$ brew install chromedriver
$ go get github.com/sclevine/agouti
$ go run main.go
// main.go
package main

import (
    "github.com/sclevine/agouti"
    "log"
)

func main() {
    driver := agouti.ChromeDriver()
    if err := driver.Start(); err != nil {
        log.Fatalf("Failed to start driver:%v", err)
    }
    defer driver.Stop()

    page, err := driver.NewPage(agouti.Browser("chrome"))
    if err != nil {
        log.Fatalf("Failed to open page:%v", err)
    }

    if err := page.Navigate("http://qiita.com/"); err != nil {
        log.Fatalf("Failed to navigate:%v", err)
    }
    page.Screenshot("/tmp/chrome_qiita.jpg")
}

PhantomJS

$ brew install phantomjs
$ go get github.com/sclevine/agouti
$ go run main.go
// main.go
package main

import (
    "github.com/sclevine/agouti"
    "log"
)

func main() {
    driver := agouti.PhantomJS()
    if err := driver.Start(); err != nil {
        log.Fatalf("Failed to start driver:%v", err)
    }
    defer driver.Stop()

    page, err := driver.NewPage(agouti.Browser("phantomjs"))
    if err != nil {
        log.Fatalf("Failed to open page:%v", err)
    }

    if err := page.Navigate("http://qiita.com/"); err != nil {
        log.Fatalf("Failed to navigate:%v", err)
    }
    page.Screenshot("/tmp/phantomjs_qiita.jpg")
}

より詳しい記事

Goではじめてみたブラウザの自動操作

参考

Using Agouti by Itself
agouti - GoDoc
Selenium の仕組み | CodeGrid
Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか | 品質向上ブログ