LoginSignup
57
57

More than 5 years have passed since last update.

agoutiというWebDriverクライアントを使って面倒な作業を自動化する

Last updated at Posted at 2017-01-24

普段の仕事で定例化しているものや、同じ作業を何回もしていて面倒だと感じることって結構あると思います。
特にWebの操作はポチポチ何回もやるのは面倒です。

そこで、Selenium WebDriverを使って作業の自動化をしてみます。
WebDriverのクライアントは様々な言語から出ていますが、今回はGolangのAgoutiというライブラリを利用します。
Golangにしたのは、一つのバイナリになるのでチームなどへの連携、配布が楽ってのが大きな理由です。

事前準備

WebDriverをインストール

  • Chrome用のWebDriverをインストール
$ brew install chromedriver

他のブラウザでも構わないですが、以下の記事の通り、FireFoxはまだ動きませんでした。(2017/1/24時点)

現状、chromedriverを利用するのが一番ラクそうです。

Safariを利用する場合は、以下からWebDriverのSafari拡張機能をインストールしてください。

また、追加でselenium-server-standaloneもインストールする必要があります。

$ brew install selenium-server-standalone

agoutiをインストール

go getでインストールします。

$ go get github.com/sclevine/agouti

Qiitaにログインしてみる

ログインだと要素の取得、値の設定、formのサブミットなどがあってちょうど良いので、Qiitaにログインしてみます。
以下のコードを実行すると、Qiitaにログインします。(適宜IDとパスワードは変更してください)

$ go run main.go
main.go

package main

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

func main() {
    // ブラウザはChromeを指定して起動
    driver := agouti.ChromeDriver(agouti.Browser("chrome"))
    if err := driver.Start(); err != nil {
        log.Fatalf("Failed to start driver:%v", err)
    }
    defer driver.Stop()

    page, err := driver.NewPage()
    if err != nil {
        log.Fatalf("Failed to open page:%v", err)
    }
    // ログインページに遷移
    if err := page.Navigate("https://qiita.com/login"); err != nil {
        log.Fatalf("Failed to navigate:%v", err)
    }
    // ID, Passの要素を取得し、値を設定
    identity := page.FindByID("identity")
    password := page.FindByID("password")
    identity.Fill("Your Id Here.")
    password.Fill("Your Passowrd Here.")
    // formをサブミット
    if err := page.FindByClass("loginSessionsForm_submit").Submit(); err != nil {
        log.Fatalf("Failed to login:%v", err)
    }
    // 処理完了後、3秒間ブラウザを表示しておく
    time.Sleep(3 * time.Second)
}

Safariで動かす場合は以下のように修正が必要です。

- driver := agouti.ChromeDriver(agouti.Browser("chrome"))
+ driver := agouti.Selenium(agouti.Browser("safari"))

実際に動かしてみると、こんな感じです。

agouti-qiita.gif

どうでしょうか?agouti自体が結構シンプルに使えるようにできているので、簡単にログインくらいは自動化できると思います。

業務ではもう少し複雑なシステムへのログイン(CSVにログインに必要なマトリクスを保存しておき、DOMからマトリクスのA1,F2,B5,D1を入力しろといった指示を抽出してマッチングする)なんかを自動化しています。

他にも勤怠情報の登録や、定期的に行ってるRedmineからの情報収集なんかも自動化できそうです。

みなさんもagoutiを使って日々の面倒な作業を自動化してみてはいかがでしょうか?

57
57
0

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
57
57