728x90

환경 구축을 아직 안하신 분들은 아래 포스팅을 따라하길 권한다.

https://jfbta.tistory.com/276


목차

     

    [Windows] Java로 daum에 자동 로그인 하기

    윈도우에서는 간단하다  intellij or eclipse같은 tool을 이용해 java application을 실행하면 된다. 이때 selenium library를 사용해야 하기 때문에 필자는 gradle을 이용해 실행시켰다.

    ※ Gradle

    plugins {
        id 'java'
        id 'war'
    }
    
    group = 'org.mvc'
    version = '1.0-SNAPSHOT'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.seleniumhq.selenium:selenium-chrome-driver:3.141.59'
    
        implementation 'org.springframework:spring-webmvc:4.3.2.RELEASE'
        testImplementation platform('org.junit:junit-bom:5.9.1')
        testImplementation 'org.junit.jupiter:junit-jupiter'
    }
    
    test {
        useJUnitPlatform()
    }

    ※ Java

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    import java.util.Collections;
    
    public class SampleMain {
        private static WebDriver driver;
    
        public static void main(String[] args) {
            try {
                // 접속사이트 URL
                String url = "https://accounts.kakao.com/login/?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net#login";
    
                // 다운로드한 chromedriver 경로 및 실행파일 설정
                System.setProperty("webdriver.chrome.driver", "c:/chromedriver/chromedriver-win64/chromedriver.exe");
    
                ChromeOptions options = new ChromeOptions();
                // 다운로드한 chrome 경로 및 실행파일 설정
                options.setBinary("C:/chromedriver/chrome-win64/chrome.exe");
                options.addArguments("window-size=1200x600");
                options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    
                driver = new ChromeDriver(options);
                driver.manage().window().maximize();
                driver.get(url);
    
                // 입력할 text 창의 id값을 설정(사이트마다 상이함)
                WebElement usernameInput = driver.findElement(By.id("loginId--1"));
                WebElement passwordInput = driver.findElement(By.id("password--2"));
    
                // 본인의 ID, PW를 입력
                usernameInput.sendKeys(""); // ID
                passwordInput.sendKeys(""); // Password
    
                // 로그인 버튼 설정
                WebElement loginButton = driver.findElement(By.cssSelector("button.btn_g.highlight.submit"));
                loginButton.click();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }

    필자는 intellij에서 실행했으며, 결과는 아래 화면과 같다.

    [CentOS] Java로 daum에 자동 로그인 하기

    리눅스에서 java를 실행할 때 조금 복잡하다.

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    import java.util.Collections;
    
    public class SampleMain {
        private static WebDriver driver;
    
        public static void main(String[] args) {
            try {
                // 접속사이트 URL
                String url = "https://accounts.kakao.com/login/?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net#login";
    
                // 다운로드한 chromedriver 경로 및 실행파일 설정
                System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
    
                ChromeOptions options = new ChromeOptions();
                // 다운로드한 chrome 경로 및 실행파일 설정
                options.setBinary("/opt/google/chrome/google-chrome");
                
                // 이 세 가지는 리눅스 환경에서 없으면 에러가 발생할 수 있다.
                options.addArguments("--no-sandbox");
                options.addArguments("--single-process");
                options.addArguments("--disable-dev-shm-usage");
                
                options.addArguments("window-size=1200x600");
                options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    
                driver = new ChromeDriver(options);
                driver.manage().window().maximize();
                driver.get(url);
    
                // 입력할 text 창의 id값을 설정(사이트마다 상이함)
                WebElement usernameInput = driver.findElement(By.id("loginId--1"));
                WebElement passwordInput = driver.findElement(By.id("password--2"));
    
                // 본인의 ID, PW를 입력
                usernameInput.sendKeys(""); // ID
                passwordInput.sendKeys(""); // Password
    
                // 로그인 버튼 설정
                WebElement loginButton = driver.findElement(By.cssSelector("button.btn_g.highlight.submit"));
                loginButton.click();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    이렇게 작성한 Java 코드를 원하는 경로로 옮긴다.

    java를 실행하려면 컴파일을 해야한다. 컴파일 하기 전에 우린 selenium 라이브러리를 사용했기 때문에 다운받아야한다.

    wget https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar

    이제 컴파일 후 실행하자

    javac -cp selenium-server-standalone-3.141.59.jar SampleMain.java
    java -cp "selenium-server-standalone-3.141.59.jar": SampleMain

    컴파일이 완료되면 class 파일이 생성된다. 이 class파일로 java를 실행할 수 있다. 실행하면 아래와 같이 나타날 것이다.

     

    [필독!] 주의 사항

    해당 코드를 실행하면 chromedriver가 별도의 프로세스로 실행하게 되는데 자동 종료가 되지 않기 때문에 종료 시켜줘야한다. 그렇지 않으면 많은 메모리를 잡고 있어 PC가 느려질 수 있다.

    윈도우

    // 실행중 프로세스 조회
    C:\Windows\System32>netstat -abnop tcp
    
    // chromedriver.exe 이름의 프로세스 모두 종료
    C:\Windows\System32>taskkill /f /im chromedriver.exe

    리눅스(CentOS)

    // 조회
    netstat -tnlp
    
    // chromedriver 이름의 프로세스 모두 종료
    pkill -f -9 chromedriver

     

    마무리 깨달음

    내가 chromedriver를 사용하게된 목적은 웹 크롤링이 아닌 모니터링 웹에서 버튼으로 특정 사이트 접근 시 자동으로 로그인되면서 열리는 기능을 구현하면서 시도해보았다. chromedriver는 gui를 제공하지 않는 환경에서는 options.addArguments("--headless"); → 이 코드를 추가해야 한다. 

    모니터링웹에서는 자바코드를 실행하는 경우 gui를 제공하지 않기 때문에 크롬 브라우저를 띄울 수 없었다.

    728x90
    TOP