Go
WebDriver
Selenium
golang
PhantomJS

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

More than 1 year has passed since last update.

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何とかっていうツールがやたら色々あるのはどういうわけなのか | 品質向上ブログ