-
초보자도 만들 수 있는 자동으로 전체 웹화면 캡쳐하기(크롤링 and 자바 활용)Study/Java 2024. 5. 20. 18:26반응형반응형
회사에서 업무 지시가 내려옴
웹화면을 전체 화면을 캡쳐해서 이미지로 저장해 달라는 요청 사항이 있었음
서치해보니 '크롤링' 이라는 기술을 사용하여 자동으로 웹화면을 캡쳐하여 이미지로 저장 할수 있었음
일단 결과 화면 부터 ㄱㄱ
1.결과
main 메서드를 실행하면 아래와 같이 자동으로 창이 뜸
자동으로 인터넷창이 뜨고 지정한 웹사이트(참고로 나는 daum ) 접속하여 자동으로 스크롤이 내려가고
자동으로 웹페이지가 전체가 캡쳐가됨.
캡쳐가 된 이미지는 지정한 경로에 png 이미지파일로 저장됨
2.설명
크롤링을 하기 위해서는 여러가지 라이브러리를 사용하는데, 일단 나는 selenium 이라는 라이브러리를 사용했고,
OS환경에 따라 다운받아야 하는게 다르기 때문에 먼저 개발환경을 소개함.
OS : 윈도우 x64
자바 : 자바8
IDE : eGovFrame(4.16.0) 버젼
크롬 : 125.0.6422.60
크롬드라이버 : 125.0.6422.60
필요한 라이브러리 : (1) commons-io-2.4.jar
(2) selenium-server-standalone-3.141.0.jar
(3) selenium-shutterbug-1.6.jar
라이브러리는 검색하면 다운로드하는 방법이 나오니, 미리 다운로드 받아 두시고 설명을 듣는게 좋을듯함.
크롤링 하는 대다수 분들은 보통 파이썬으로 많이 작업해서 파이썬 언어를 알아야 크롤링을 할 수 있는줄
알았는데, 찾아보니 selenium 라이브러리는 파이썬외에 여러가지 언어를 지원하는데,
그중 자바가 익숙하여 자바로 selenium 라이브러리를 이용하여 크롤링작업을 할 예정 임.
반응형(1) chromeDriver 다운로드
크롤링을 사용할때 크롬브라우져에 직접 명령을 내리는게 아니라 크롬드라이버에 명령을 내려 자동으로 업무를 진행 하기 때문에 크롬드라이버를 다운로드하는 과정이 필요함.
이때 주의할점이 크롬과 크롬드라이버 버젼이 둘다 동일해야함.
아래 링크로 들어가면 크롬드라이버 (114.0.5735.90 버젼) 까지 나와 있는데
https://developer.chrome.com/docs/chromedriver/downloads
다운로드 | ChromeDriver | Chrome for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 다운로드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 달리 명시되지 않는 한 이 페이지의 콘텐츠
developer.chrome.com
최근에 크롬을 업데이트 했거나 새로 깔았던 분 이라면 114버젼 이상일 꺼임.
나는 최근 업데이트를 해서 chrome ver.125.0.6422.60 이라 추가적으로 아래절차가 필요함.
위에 이미지에 형광펜으로 그어진 부분에 접속하면 아래와 같은 이미지가 나오고 stable 목록 에서
내 OS 환경에 맞는 'win64' 의 chromedriver 를 받았음(각자 OS환경에 맞는걸 받음 됨)
위에 노란색으로 표시한 부분의 링크를 표시하여 주소창에 넣으면 zip파일로 다운로드 되고 압축을 풀면됨.
(2) 프로젝트 생성 및 라이브러리 와 크롬드라이버 저장위치 정해주기
Dynamic Web Project 로 생성을 하고 라이브러리는 위에서 말한
commons-io-2.4.jar , selenium-server-standalone-3.141.0.jar , selenium-shutterbug-1.6.jar 3가지를 다운로드 받았다는 가정하에 라이브러리를 WebContent > WEB-INF > lib 폴더 밑에 가져다 놓음됨.
chromedriver는 해당 프로젝트 바로 밑에 driver 폴더를 생성하고 그밑에 chromedriver.exe 가져다 놓음 됨.
아래 파일구조 참고!
(3) class 파일 생성 및 코드
위에 이미지 보면 src폴더밑에 패키지는 dev.selenium.hello 로 생성하고 class이름은 helloSelenium2 로 main 메서드도
같이 생성후에 아래 코드 대로 치면 됨
코드 설명은 주석으로 대신함.
package dev.selenium.hello; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.OutputType; import java.io.File; import org.apache.commons.io.FileUtils; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import com.assertthat.selenium_shutterbug.core.Capture; import com.assertthat.selenium_shutterbug.core.Shutterbug; public class helloSelenium2 { public static void main(String[] args) { // ChromeDriver 경로 설정 System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); // WebDriver 객체 생성 WebDriver driver = new ChromeDriver(); // 웹 페이지로 이동 driver.get("https://www.daum.net/"); // 최대사이즈로 창열기 driver.manage().window().maximize(); //Shutterbug 라이브러리를 써서 캡쳐해줌 Shutterbug.shootPage(driver, Capture.FULL, true).save("C:\\work\\fullSizeScreenshot"); // WebDriver 종료 driver.quit(); } }
반응형추가적으로 설명을 조금더 하자면 selenium 라이브러리로 웹화면 캡쳐가 가능하지만
viewPort 기준으로 캡쳐가 되기 때문에 full page로 전체 캡쳐는 어렵다.
그래서 이방법 저방법 서치하며 해본던중 Shutterbug 라는 라이브러리를 발견했고,
이 라이브러리가 자동으로 스크롤을 내려 전체 페이지를 캡쳐를 해줌.
반응형'Study > Java' 카테고리의 다른 글
초보자도 간단하게 스프링으로 만드는 파일업로드 기능(spring file upload) (0) 2023.03.16 초보자를 위한 DB 기초편 (JDBC 란? DBMS 란?) (0) 2023.02.15 자바의정석-배열의 장단점(arrayList 또는 배열 for문으로 삭제 했는데 숫자가 남아요 ㅠㅠ) (0) 2023.01.17 자바의 정석-ArrayList (2) 2023.01.16 자바의 정석-컬렉션프레임웍(collections framework) (0) 2023.01.16