JAVA Selenium

jihan kong·2024년 4월 24일
0

JAVA Crawling

목록 보기
1/1
post-thumbnail

JAVA 웹 크롤링

요즘 회사에서 하고 있는 업무가 있다. 크롬과 같은 웹 브라우저를 조작하여 웹 크롤링을 통해 특정 링크 (우리 회사의 경우는 공공부처 홈페이지) 에 접속하여 스크린샷을 찍거나 로그인을 하거나, 혹은 화면의 내용을 토대로 결과값을 생성하여 Telegram bot을 이용. 일정시간이 되었을 때 메세지를 발송하는 작업이다.

이 작업을 위해서는 Selenium이라는 자동화 프레임워크가 필요하다. 나도 이번에 크롤링이라는 기능을 위해 처음으로 사용해보게 되었는데 그야말로 신세계를 경험했다.😯 웹 브라우저를 자동으로 열고, 버튼을 클릭하고, 텍스트를 입력하고 스크린샷을 찍고 등등... 본인의 서비스 혹은 프로젝트가 웹 브라우저 기반이며 이에 더불어서 자동화 처리까지 생각하고 있다면 Selenium을 빼놓고는 이야기할 수 없다.

제목을 "JAVA Selenium" 이라고 했지만 JAVA에서만 사용할 수 있다고 생각하면 오산이다. C#, Python, PHP, Pearl, Ruby, Scala 등 수 많은 프로그래밍 언어에서 Selenium을 지원하고 있다. 즉, 엄밀히 말하면 테스트 프레임워크인 만큼 기능 테스트를 만든다고 표현하는데 각 언어에서 테스트 특화 언어를 제공한다는 것이다. (그런데 라이센스는 아파치가 갖고 있음...)

그렇다면 Selenium은 어떤 특징을 가지고 있는지 낱낱이 파헤쳐보자.

Selenium

웹 브라우저 자동화 오픈소스 프레임워크

웹 크롤링을 한다고 하면 보통 이 프레임워크를 사용하며 장점과 단점은 다음과 같다.

Good 🙂

  • 동적 페이지 처리
  • 사용자 상호작용 모방

Selenium은 웹 브라우저를 실제로 실행하고 웹 페이지와 상호작용하게 된다. 즉, JavaScript와 같이 동적으로 구성한 컨텐츠도 쉽게 처리할 수 있게 된다. 사용자 상호작용 모방의 의미는 유저가 사용하듯이 웹 페이지에 로그인 혹은 회원가입, 양식 제출 등의 상호작용을 똑같이 따라하여 자동화할 수 있다는 이야기이다. 실제로 로그인 자동화 기능을 구현할 때, 태그의 id값만 있으면 이를 이용해 로그인을 할 수 있었다.

BAD 😑

  • 브라우저 호환성
  • 무겁고 느림
  • 인증 처리 통과 ✖

모든 기능에는 Trade-off가 있기 마련. Selenium의 단점으로 첫 번째는 브라우저 호환성이다. 흔히 자주 사용하는 'Chrome' 브라우저의 경우를 봐도 크롬 Driver 버전이 크롬 웹 버전과 일치하지 않는다면 오류가 발생하며 작동자체가 되지 않는다. 따라서 주기적으로 최신 드라이버로 업데이트해줄 필요가 있다. 또한, 상대적으로 무겁고 느리다는 단점이 있으며, 캡차나 인증처리와 같은 보안 기능을 우회하는 것이 어려울 수 있다. 실제로 업무에서 공인인증서 로그인을 selenium을 통해 시도해보았으나, 인증서 비밀번호를 작성하는 입력란이 보안 이슈로 자동 입력을 허용하지 않아서 실패했던 경험이 있다.

번외

Crawling vs Scraping

웹 Crawling과 Scraping의 차이를 아는가? 나도 비슷한 줄 알았지만 약간은 다른 개념이다.

웹 스크래핑 (Web Scraping)

  • 웹 페이지에서 원하는 정보를 추출하고 정보를 분석
  • HTML을 파싱하고 필요한 데이터 추출하는 작업

웹 크롤링 (Web Crawling)

  • 웹 페이지를 자동으로 탐색하여 링크를 따라가면서 웹 페이지 정보 수집

요약하면 스크래핑은 특정 웹 페이지에서 데이터를 추출하고 분석하는 것이며 크롤링은 여러 웹 페이지를 돌아다니면서 데이터를 수집하는 것을 말한다.

당연 Web Scraping에 특화된 라이브러리도 존재한다.

(자바 로고에서 저 컵에 담긴게 커피라고 알고 있다. 근데 스프를?)

Jsoup

Java로 작성된 HTML 파싱 및 웹 스크래핑을 위한 오픈 소스 라이브러리

GPT에게 Jsoup에 대해 알려달라고 하면 다음의 내용을 얻을 수 있다.

  • 고성능 HTML 파싱: Jsoup은 HTML 문서를 파싱하고, DOM 조작, CSS 선택자를 사용하여 데이터를 추출하는 데 특화되어 있습니다. 이는 정적 HTML 문서에서 데이터를 추출할 때 매우 빠르고 효율적입니다.
  • 경량 및 빠름: Jsoup은 Selenium과 달리 별도의 웹 브라우저를 실행할 필요가 없기 때문에 리소스 사용이 적고 처리 속도가 빠릅니다. 정적 콘텐츠의 크롤링이나 스크래핑에 이상적입니다.

요약하면 Jsoup은 HTML과 같은 정적 문서를 파싱하는데에는 최적의 성능을 자랑하지만 자바스크립트를 실행시킬 수 없기 때문에 동적 문서에는 적합하지 않다. 따라서 웹의 구성과 활용목적 및 요구사항에 맞게 사용하는 것이 중요하다.

물론 함께 사용할 수도 있다. 동적으로 로딩되는 데이터를 처리해야 하는 경우 Selenium을 사용하여 데이터가 모두 로드된 후의 최종 HTML을 가져올 수 있다. 이렇게 가져온 HTML을 Jsoup에 전달하여, Jsoup의 강력한 파싱 및 데이터 추출 기능을 이용하는 것이다. 이 방법은 웹 페이지에서 동적으로 생성된 데이터와 정적 데이터 모두를 효과적으로 처리하고자 할 때 유용할 것이다.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글