토이 프로젝트로 무엇을 만들까 하다가 Selenium를 이용하면 크롤링, 자동 로그인 기타 등등 웹브라우저를 컨트롤 할 수 있다는 이야기를 듣고 한번 찾아보기로 했다.
공식 문서상에 이렇게 소개되어있다.
Selenium automates browsers. That's it! What you do with that power is entirely up to you. Primarily it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should) also be automated as well.
이를 파파고를 이용해 번역해보면
셀레늄은 브라우저를 자동화한다. 바로 그거야! 그 힘으로 무엇을 하느냐가 전적으로 너에게 달려 있다. 주로 테스트 목적으로 웹 애플리케이션을 자동화하기 위한 것이지만, 그것에만 국한되지는 않는다. 지루한 웹 기반 관리 작업도 자동화될 수 있다(또한 그래야 한다).
음..어떠한 말보다 '자동화'라는 말에 이끌렸다
그래서 바로 실행에 옮겼다.(네이버는 captcha 코드가 발생하므로 다음 카카오로 진행함)
필자 기준으로 gradle 빌드 시스템을 이용한 자바 프로젝트를 만들 예정이기에 해당 dependency를 찾아보기로 했다.
Maven Repository에 다행히도 있었다 👍
Selenium Repository
package com.lee.practice;
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;
public class Selenium {
private String kakaourl = "https://accounts.kakao.com/login?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net%252F";
//WebDriver
private WebDriver driver;
public static String WEB_DRIVER_ID = "webdriver.chrome.driver";
public static String WEB_DRIVER_PATH = "/Users/jeongseok/Downloads/chromedriver";
public Selenium() {
selenium_init();
execute_selenium();
}
private void execute_selenium() {
try {
login();
Thread.sleep(1000);
go_to_mail();
Thread.sleep(1000);
delete_spam_mail();
} catch (Exception e) {
}
}
private void selenium_init() {
//System Property SetUp
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
//Driver SetUp
ChromeOptions options = new ChromeOptions();
options.setCapability("ignoreProtectedModeSettings", true);
driver = new ChromeDriver(options);
}
public void login() {
driver.get(kakaourl);
driver.findElement(By.id("id_email_2")).sendKeys("아이디");
driver.findElement(By.id("id_password_3")).sendKeys("패스워드");
driver.findElement(By.className("btn_g")).click();
}
public void go_to_mail() {
driver.findElement(By.xpath("//*[@id=\"mArticle\"]/div[1]/div[2]/ul/li[1]/a")).click();
}
public void delete_spam_mail() {
driver.findElement(By.xpath("//*[@id=\"mailToolbar\"]/div/div/div[1]/label")).click();
driver.findElement(By.xpath("//*[@id=\"mailToolbar\"]/div/div/div[2]/button[1]")).click();
}
}
public class Main {
public static void main(String[] args) {
new Selenium();
}
}