JAVA/Crawling

[SpringBoot - Selenium] Chrome Driver 초기 설정

Yuco 2023. 10. 31. 22:05

 

1. Chrome Driver 다운로드

 

먼저 Chrome Driver 다운로드가 필요합니다. 현재 사용하는 Chrome 버전을 확인하여, 동일한 버전으로 다운 받으시길 바랍니다. 버전이 다를 경우 에러가 크롤링 시 에러가 뜰 수 있기 때문에 최대한 같은 버전의 Chrome Driver을 사용하는 걸 권장합니다.

 

현재 114 버전까지는 아래 사이트에서 다운로드 가능합니다. 

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading. For older versions of Chrome, please se

chromedriver.chromium.org

 

115 이후 부터는 아래 링크를 이용하시기 바랍니다.

https://googlechromelabs.github.io/chrome-for-testing/

 

Chrome for Testing availability

chrome-headless-shellmac-arm64https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/120.0.6099.0/mac-arm64/chrome-headless-shell-mac-arm64.zip404

googlechromelabs.github.io

 

 

2. gradle에 selenium 추가

Chrome Driver을 사용하기 위해 gradle 또는 maven에 selenium을 추가해줘야 합니다. 

implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'

 

 

3. Chrome Driver 초기 설정

Chrome Driver을 사용하기 위해서는 초기 세팅이 필요합니다. 저는 초기 세팅 코드를 아래와 같이 작성하였습니다. 

Chrome 창을 띄우기 위한 Web Driver가 필요하며, 또한 창을 띄우기 위한 옵션 설정이 가능합니다.

ChromeOptions options = new ChromeOptions();
        options.addArguments(
            "--headless",
            "--window-size=1920,1200"
        );
        webDriver = new ChromeDriver(options);

 

위와 같은 방식으로 Chrome Web Driver을 열기 위한 Option을 설정해주었습니다.

저는 Chrome 창을 띄우지 않고, backGround에서 실행되는 'headless' 방식을 사용하여 Web Driver을 사용하였습니다. 옵션은 필수가 아니며, 본인의 상황에 맞는 옵션을 설정하시길 바랍니다. 

 

private WebDriver webDriver;

    public static String WEB_DRIVER_ID = "webdriver.chrome.driver";
    public static String WEB_DRIVER_PATH = "/chromedriver/chromedriver";

    public void initializeWebDriver() {
        System.setProperty(
            WEB_DRIVER_ID,
            WEB_DRIVER_PATH
        );
        ChromeOptions options = new ChromeOptions();
        options.addArguments(
            "--headless",
            "--window-size=1920,1200"
        );
        webDriver = new ChromeDriver(options);
    }

 

이러한 초기 세팅을 하고, 실제 크롤링 하고자 하는 부분에 대해 작성하면 됩니다.

 

만약 어느 사이트에 접근해서 로그인을 시키고 싶다라고 가정한다면, 아래와 같은 방식으로 작성할 수 있습니다. 접근 하고자 하는 사이트의 HTML 구조 역시 모두 다르기에 아래 코드는 단순히 참조만 하시길 바랍니다. 

 

Chrome Web Driver에서는 element를 찾기 위한 옵션으로 By.className, by.name, By.id, By.linkText, By.cssSelector 등 여러 값을 사용할 수 있으며, 아래 코드와 같이 로그인을 위한 값을 설정할 수 있는 sendKeys() 메소드, 버튼을 누르기 위한 click() 메소드 등이 존재합니다. 

 

public void login() {
        String loginUrl = "로그인 페이지 URL";

        webDriver.get(loginUrl);

        webDriver
            .findElement(By.name("id"))
            .sendKeys("loginId");
        webDriver
            .findElement(By.name("password"))
            .sendKeys("loginPassWord");
        webDriver
            .findElements(By.cssSelector("input[type='image']"))
            .get(0)
            .click();
    }

 

* 만약 초기 설정 후 postman 요청 시 신뢰할 수 없는 드라이버라는 경고가 뜰 경우, Command에서 Chrome Driver 폴더에 접속해 아래 명령어를 입력해주면 해결됩니다. 

xattr -d com.apple.quarantine chromedriver