환경 구축을 아직 안하신 분들은 아래 포스팅을 따라하길 권한다.
목차
[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를 제공하지 않기 때문에 크롬 브라우저를 띄울 수 없었다.
'기타 > 꿀팁' 카테고리의 다른 글
java, chromedriver를 이용해 웹사이트 자동 로그인 따라하기 1탄 (0) | 2024.02.03 |
---|---|
코드 컨벤션 규칙(Code convention rule)[참고용] (0) | 2023.07.17 |
javascript Date 함수와 DB SYSDATE 함수의 차이 (0) | 2023.05.24 |
maven 외부 라이브러리 추가 방법 (0) | 2023.03.30 |
꿀팁 ] Ping 명령어로 IP 접근 여부 확인하기 (0) | 2023.02.27 |