[Web] 자바(JAVA) 셀레니움(Selenium)을 통해 크롤링하기

2022. 5. 30. 14:38Web

1. 셀레니움(Selenium) ?

  - 셀레니움은 무료 오픈소스이다.

  - 셀레니움은 웹 어플리케이션을 간편하게 조작하고 테스팅하기 위해 만들어진 툴

  - 셀레니움은 Chrome, Safari, firefox, IE 등 다양한 브라우저에서 동작

  - 셀레니움은 브라우저 호환테스팅, 자동화 테스팅에 적합한 모듈이다.

 

2. 셀레니움 사용을 위한 환경설정(Chrome)

  1.  사용하고있는 크롬 브라우저 버전에 맞는 크롬 드라이버 설치하기

   - 크롬브라우저 오른쪽 상단의 메뉴를 클릭하고 설정의 Chrome 정보를 클릭한다.

  - https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 102, please download ChromeDriver 102.0.5005.61 If you are using Chrome version 101, please download ChromeDriver 101.0.4951.41 If you are using Chrome version 100, please download ChromeDriver 100.0.4896.60

chromedriver.chromium.org

  - 해당 URL로 접속하여 크롬버전 앞자리와 같은 크롬드라이버를 다운로드한다.

  - 다운로드 한 파일의 압축을 풀고 실행한다.

- 맥의 경우 권한오류로 해당 창이 뜰 수도 있다. 해결방법으로는

  - 맥 환경설정에서 보안 및 개인 정보 보호를 클릭하고 확인없이 열기를 클릭해주면 된다.

  2.  Gradle 환경설정에서 Selenium 라이브러리 다운로드하기

dependency를 추가해준다.

  3.  셀레니움으로 웹 크롤링 하기

크롤링을 할수있는 interface를 작성한다.
application.properties에서 크롬드라이브의 경로를 지정해준다.

  - 나라사랑 포털 크롤링하기

Crawling 인터페이스를 상속받은 클래스를 구현해준다.

     - url : 크롤링 할 페이지의 URL을 변수로 선언한다.

     - page : 게시판의 경우 page를 변수로 선언한다.

     - driverPath : application.properties 에서 선언한 크롬드라이브의 경로를 받아온다.

     - driverFile : 경로의 파일을 파일 객체에 담아준다.

     - ChromeOptions : 크롬 옵션 객체를 들고와 옵션을 지정해준다.

             - headless : 창이 없는 모드( linux 등 에서 실행할 경우 필요하다), 브라우저가 눈에 보이지 않고 내부적으로 실행.

             - no-sandbox : linux 등 에서 실행할 경우 필요하다

             - disable-dev-shm-usage: linux 등 에서 실행할 경우 필요하다

     - ChromeDriverService : 크롬 드라이버 서비스 객체를 들고와 설정해준다.

             - usingDriverExecutable : 크롬드라이브의 파일객체를 들고와 실행한다.

             - usingAnyFreePort : 크롬이 동작할 포트를 설정해준다.(서버(linux)에서 돌아갈경우 usingPort(5000)등을 사용한다.

             - build : 설정한 옵션대로 Service를 빌드한다.

     - WebDriver : 크롬 드라이버 객체를 들고와 설정해준다.

     - WebDriverWait : 드라이버 실행 시 잠깐의 타임아웃

Xpath를 통해 지정된 데이터를 크롤링하는 로직

     - WebElement : 크롤링 할 엘리먼트의 Xpath를 복사해 선언해준다.

     - getText() : 엘리먼트의 텍스트를 들고와 변수에 담는다.

     - getAttribute() : 엘리먼트의 onclick 안 텍스트를 들고와 변수에 담는다.

     - url : 최종 url을 조합해 각 테이블의 url을 들고올수 있다.

     - driver.close() : 크롬 브라우저창을 닫는다.

     - driver.quit() : 크롬 브라우저를 종료한다.

     - service.stop() : 서비스를 중지한다.

최종 크롤링한 데이터를 DB에 담는 부분

 

4. 마무리

  - 크롤링은 개발을 하면서 종종 쓰일일이 생길거같다.

  - 복잡한 사이트의 경우 정규식등을 사용하며 데이터를 정제할 필요가 있다.

  - 로컬에서 실행하는 방법과 서버에서 동작하는 방법을 주의해서 설정하여 테스트 해볼 필요가 있다.