Golang에서 Chrome Webdriver + Selenium 사용하기

2020-07-02

Golang에 막 입문한 뉴비 고퍼 입니다.

주로 파이썬에서 셀레니움을 이용한 작업들을 진행해오다 Go에서도 구현 해보고자

이런저런 자료를 찾아보다가 꽤나 막혔었는데 방법을 찾았습니다.


webdriver

https://github.com/fedesog/webdriver

Install:

$ go get github.com/fedesog/webdriver


selenium for golang (유명하죠 원래 여기가 메인입니다. 근데 어떻게 해도 잘 안됨)

https://github.com/tebeka/selenium

Install:

$ go get -t -d github.com/tebeka/selenium


적당한데 프로젝트 폴더 생성

$ mkdir go/src/selenium_test


생성한 폴더에 크롬 드라이버를 다운 받아서 넣어 줍니다.

(버전은 사용하시는 크롬 브라우저와 같은 걸로 받으시면 됩니다.)

https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.39


에디터에서 main.go 작성

$ atom main.go 또는 code main.go


소스 코드는 webdriver 샘플 소스 기반으로 셀레니움을 적당히 버무립니다.

package main

import (
    "log"
    "time"

    "github.com/fedesog/webdriver"
    "github.com/tebeka/selenium"
)

func main() {
    chromeDriver := webdriver.NewChromeDriver("./chromedriver.exe")
    err := chromeDriver.Start()
    if err != nil {
        log.Println(err)
    }
    desired := webdriver.Capabilities{"Platform": "Windows"}
    required := webdriver.Capabilities{}
    session, err := chromeDriver.NewSession(desired, required)
    if err != nil {
        log.Println(err)
    }
    err = session.Url("http://golang.org")
    if err != nil {
        log.Println(err)
    }

    // 셀레니움 관련 제어 부분
    btn, _ := session.FindElement(selenium.ByCSSSelector, "#page > div > div.HomeContainer > section.HomeSection.Playground > div.Playground-controls > div > button")
    btn.Click()

    time.Sleep(60 * time.Second)
    session.Delete()
    chromeDriver.Stop()
}


꽤 잘 동작 합니다. 리눅스에서도 똑같이 잘 됩니다.

파이썬 너무 좋지만 Golang도 넘 재밌습니다^^

이제 GUI만 잘 만들면 더 좋을 것 같네요.