エンジニア採用担当がプログラミング頑張る話【29日目/2ヶ月間】
こんにちは、@hiroki_maekawaです。
またも画像はGopher君。今日はagoutiとのコラボです。
Webブラウザの作業自動化
昨日、EC2サーバを使う=「EC2にgoでechoを使って書いたサーバープログラムをアップロードして→go run server.goして→EC2がhttpリクエストを受け取れるようになってサーバになる」ということが分かりました。
先週まで書いていたサーバープログラムがあるのですが、EC2にアップロードする前に新しく自分的にテンションの上がるプログラムを書きたいと思い、前々から興味があったWebブラウザの自動化にGoで挑戦してみることにしました。
調べたところ、GoのライブラリのAgouti&Selenium WebDriverでできるようなので、ちょっとインストールして試してみることにしました。
Chrome用のWebDriverをインストール
$ brew install chromedriver
// エラーが出たので下記で解決しました
$ brew tap homebrew/cask
$ brew cask install chromedriver
お次はAgoutiをインストール
$ go get github.com/sclevine/agouti
公式ドキュメントの他に、色々なサイトや動画を参考に、とりあえずWebサイトのログインまでできました。
package main
import (
"fmt"
"time"
"github.com/sclevine/agouti"
)
func main() {
url := "XXX"
driver := agouti.ChromeDriver()
//ドライバの起動+スタート
err := driver.Start()
if err != nil {
fmt.Println("Failed to start driver")
}
//defer driver.Stop()
//クロームの起動+ページを開く
page, err := driver.NewPage(agouti.Browser("chrome"))
if err != nil {
fmt.Println("Failed to open new page")
}
//ログインページ開く
err = page.Navigate(url)
if err != nil {
fmt.Println("Failed to open login page")
}
page.Session().SetImplicitWait(10)
//もしログイン画面が出てきたら
//usernameとpasswordのIDを取得
username := page.FindByID("username")
password := page.FindByID("password")
//usernameとpasswordを入力
username.Fill("XXX")
password.Fill("XXX")
//サインインボタンを押す
err = page.FindByButton("サインイン").Submit()
if err != nil {
fmt.Println("Failed to login")
}
}
またある動画を見ていたところ、secrets.goという別ファイルを作り、外部パッケージのインポートを作ってパスワードを管理する方法があるということに気づきました。
@Sueken51さんに下記参考にしてみては?とアドバイスを頂き、これはまたPATHでつまずいてるのか、、と思いながら解決を試みました。
importへの記載方法、またGOPATH内に外部ファイルを置くことに気をつけることは分かったのですが、github.com/secretsとしても通らなかったのでなぜだ、、という疑問がひとつと、なぜGOPATHがGOPATH=/Users/hirokimaekawa/goなのに、github.com/sclevine/agoutiは通るんだ、、という疑問が出てきました。
ここは解決できなかったので明日に持ち越します。。
今日できるようになったこと
・Webページのログイン自動化
さいごに
Pythonでの参考サイトを色々見ながらみんな何をしてるのか観察して、それを自分なりにGoバージョンにしていくような作業をしてます。
日々の作業を自動化できると思うと完成が楽しみです。
それではまた!
この記事が気に入ったらサポートをしてみませんか?