ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바 selenium 크롤링 - 브라우저 제어하기
    Java/Java Library 2021. 3. 8. 18:04

    자바로 크롤링을 하려면 SSR - 서버사이드 렌더링 인 경우 url 에 로 http 리퀘스트 해서 받아온 응답을

    element 를 찾아 파싱만 하면 된다.

     

    하지만 문제가 CSR - 클라이언트사이드 렌더링 의 경우 크롤링을 하기 어렵다.

    뿐만 아니라 로그인 및 기타 인증이 필요한 사이트일 수록 크롤링을 하기 어렵다.

     

    그래서 브라우져를 프로그래밍으로 조작해서 필요한 데이터만 추출하는 라이브러리를 사용해야 한다.

    라이브러리는 Selenium 라이브러리다.

     

    Selenium?

    : Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크이다. ebdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어하게 된다.

    spring boot 를 활용해서 maven 으로 pom.xml 에 다음과 같이 추가한다.

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.3.1</version>
    </dependency>

     

    브라우져의 드라이버도 각자 받아야한다.

    유의해야 할 것은 크롬의 경우 사용자가 사용하는 브라우져의 크롬 버젼을 확인해서 같은 버젼의 드라이버를 받아야 한다.

    설정 > chrome 정보 에서 버젼을 확인한다.

     

    드라이버 세팅

    public class Webdriver {
    
        //WebDriver 설정
        private WebDriver driver;
    
        //Properties 설정
        public static String WEB_DRIVER_ID = "webdriver.chrome.driver";
        public static String WEB_DRIVER_PATH = "/Users/chromedriver"; // 다운받은 크롬드라이버 경로
    
    
        public Webdriver() {
            //System Property SetUp
    
            chrome();
            //firefox();
        }
        
        private void chrome(){
            System.setProperty("webdriver.chrome.driver", DRIVER_PATH);
    		ChromeOptions options = new ChromeOptions();
    		options.setHeadless(true);
    		options.addArguments("--lang=ko");
    	    options.addArguments("--no-sandbox");
    	    options.addArguments("--disable-dev-shm-usage");
    		options.addArguments("--disable-gpu");
            options.setCapability("ignoreProtectedModeSettings", true);
    
    
    	    ChromeDriver driver = new ChromeDriver(options);
    	    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        }
        
        private void firefox() {
            System.setProperty("webdriver.gecko.driver", "/Users/eomjuntae/develop/spring/crawling/src/main/resources/geckodriver");
            driver = new FirefoxDriver();
        }
        ...
        
        public void useDriver(String url) {
        	driver.get(url);	
        }
    }    

    위와 같이 크롬 드라이버에 관한 세팅을 하자. 

    파이어폭스 드라이버 메소드도 만들었다. 위의 경로 설정으로 사용하면 된다.

     

    드라이버를 생성후 get 메소드를 사용하면 된다.

    Webdriver webdriver = new Webdriver();
    webdriver.useDriver("https://juntcom.tistory.com");

     

    드라이버 close 및 quit

    브라우저를 띄우게 되면 항상 close 를 시켜줘야 한다. 하지 않으면 메모리만 잡아먹게 된다.

    close() 메소드와 quit() 메소드의 차이는

    quit 는 브라우져 종료

    close 는 탭 종료 이다.

    더이상 사용하지 않을 경우 quit() 메소드로 종료 시켜야 한다.

    반응형

    댓글

Designed by Tistory.