Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goでブラウザ業務を自動化する

shuntaka
September 18, 2018
2.1k

 Goでブラウザ業務を自動化する

shuntaka

September 18, 2018
Tweet

Transcript

  1. 使い方(ドライバーの作成、起動) // driverを定義 var driver *agouti.WebDriver // ブラウザにchromeを指定して起動(自動操作したいブラウザを指定) driver =

    agouti.ChromeDriver(agouti.Browser("chrome")) if err := driver.Start(); err != nil { log.Fatalf("Faild to start driver %v\n", err) } // 関数終了時、ブラウザ終了 defer driver.Stop()
  2. 続き(ページ遷移) // 先程のdriverから、ページを取得 page, err := driver.NewPage() if err !=

    nil { log.Fatalf("Faild to return page %v\n", err) } // Googleに遷移 if err := page.Navigate("https://www.google.com/"); err != nil { log.Fatalf("Faild to open page %v\n", err) }
  3. headlessモード(ブラウザ非表示モード) // non-headless driver = agouti.ChromeDriver(agouti.Browser("chrome")) // headless driver =

    agouti.ChromeDriver( agouti.Browser("chrome"), agouti.ChromeOptions( "args", []string{"--headless", "--disable-gpu"}), )
  4. フォーム処理・ログイン処理方法 // ログイン画面遷移 if err := page.Navigate("https://login..."); err != nil

    { log.Fatalf("driver停止エラー:%v", err) } // ユーザー名入力・ボタン押下 page.FindByClass("input-text").Fill(conf.Gsuite.User) page.FindByClass("input-button").Click() // パスワード入力・ボタン押下 page.Find("#password").Fill(conf.Gsuite.Password) page.FindByClass("input-button").Click() 指定したタグに、値を入力 指定したタグをクリック タグを指定
  5. パラレル実行(フォーム入力・申請) wg := &sync.WaitGroup{} filDay := time.Now() // 1週間分の申請をパラレルに実行 for

    i := 0; i < 5; i++ { go func(day string) { wg.Add(1) Fillday(day) wg.Done() }(filDay.Format("20060102")) filDay = filDay.AddDate(0, 0, 1) // 日付を加算 } wg.Wait() ※イメージ 日付(引数指定)のサーバー利用申請してくれる関数
  6. // 領収書のポップアップ表示されるボタンタグを押下 page.Find("#contentInner > div.table-history > p > a").Click() //

    ポップアップにウィンドウを遷移 page.NextWindow() // スクリーンショットを取得 page.Screenshot(imgfolder + "/" + baseobj.Start + ".png") // 元のウィンドウに戻る page.NextWindow() スクリーンショット機能 保存するパス・ファイル名を指定
  7. 最後に画像エンコード処理を実行 合成後の画像サイズ 5月の領収書画像 out, _ := os.Create("out.png") // エンコード png.Encode(out,

    rgba) /* (0,0)-(670,654) 201701.png (670,0)-(1340,654) 201702.png (0,654)-(670,1308) 201803.png … */ rgba 6月の領収書画像 3月の領収書画像 4月の領収書画像 1月の領収書画像 2月の領収書画像 x y