Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

普段の仕事で定例化しているものや、同じ作業を何回もしていて面倒だと感じることって結構あると思います。
特に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を使って日々の面倒な作業を自動化してみてはいかがでしょうか?

tenten0213
ここで発信する内容はあくまで私個人の意見であり、現在所属する会社の公式見解を示 すものではありませんし、全裸だからって通報しないでいただけると幸いです。
http://tenten0213.hatenablog.com/
forcas
『FORCAS(フォーカス)』は、データ分析に基づいて成約確度の高いアカウントを予測し、マーケティングと営業のリソースをそのターゲットアカウントに集中する最新マーケティング手法「Account Based Marketing (ABM) 」の実践を強力にサポートするマーケティングプラットフォームを開発・提供してます。
https://www.forcas.com/overview/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away