Spring boot 에서 selenium 라이브러리 디펜던시 Exception

Slack Bot을 만들어 볼까 해서 집에 있는 나스에 spring boot로 올리려고 했다.
그래서 좋은 웹 크롤러 라이브러리가 뭐가 있나 찾아보다가
selenium이라고 아주 깔쌈한 걸 찾아서 사용해보려고 했다가
알 수 없는 예외 때문에 하루를 그냥 날려버렸다.

일단 Gradle dependencies에 추가
compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'

일단 selenium을 쓰려면 WebDriver를 사용한다.
WebDriver도 브라우저마다 다양하게 지원된다.
FireFox, Chrome, Opera, IE, Edge, Safari 이렇게 지원해주나?

그 중에서도 나는 Chrome driver를 사용하려고 했다.

http://chromedriver.chromium.org/downloads
여기서 driver를 다운 받는데, 제일 중요한 점!

본인 컴터에 깔린 크롬 버전에 맞게 다운받아야된다.
아니면 java.lang.IllegalAccessError: tried to access class org.openqa.selenium.os.ExecutableFinder 예외를 맞닥뜨리게 된다.
혹은 아래에 나오는 경로를 잘못 잡아줘도 같은 예외를 맞닥뜨린다.


내가 다운로드 한 버전은 74


Driver 객체 생성하기 전에 아래 처럼
다운 받은 chromedriver 경로를  system property에 잡아줘야된다.
여기까지는 금방금방 진행이 되었다.
System.setProperty("webdriver.chrome.driver", "/Users/namdong-gil/Downloads/chromedriver");WebDriver driver = new ChromeDriver();

하지만 아래에 나오는 이 예외 때문에 한참을 아니 하루를 그냥 날렸다...!
java.lang.IllegalAccessError: tried to access method com.google.common.util.concurrent.SimpleTimeLimiter.<init>(Ljava/util/concurrent/ExecutorService;)V from class org.openqa.selenium.net.UrlChecker

구글링 하다가 원인을 알아 냈다.
https://stackoverflow.com/questions/45643956/illegalaccesserror-thrown-by-new-chromedriver-on-osx-java


요약하자면, selenium은 guava 버전과 디펜던시가 물려있어서
guava가 없어도 예외가 생기고
guava 버전이 19.0이 아니라도 예외가 발생한다...

그래서 아래처럼 추가... 해결 되었다.
compile group: 'com.google.guava', name: 'guava', version: '19.0'

댓글

  1. ChromeDriver 89.0.4389.23 버전에서는 guava 버전을 27.1-jre 로 해야 오류가 나지않습니다.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째