ABOUT ME

Today
Yesterday
Total
  • 초보자도 만들 수 있는 자동으로 전체 웹화면 캡쳐하기(크롤링 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 라는 라이브러리를 발견했고, 

    이 라이브러리가 자동으로 스크롤을 내려 전체 페이지를 캡쳐를 해줌.

    반응형

    댓글

Designed by Tistory.