LoginSignup
68
61

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-06-12

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

68
61
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
61