본문 바로가기
프로그래밍/자바

자바 셀리니움(Selenium) 라이브러리 - 자바 웹 조작하기 예제

by 밍구몬 2019. 8. 16.

Selenium 라이브러리는 웹 페이지를 크롤링, 조작 할 수 있다.

 

1. Selenium 라이브러리 다운

https://www.seleniumhq.org/download/ 의 사이트에 접속하여 Java 버전을 다운받아 준다.

다운 받은 파일을 압축해제 후 library를 등록하여 준다.

( Project -> Properties -> Add External jARs..)

json 과 jsonp는 다른 작업을 하며 넣어놓은 것이기 때문에 넣을 필요는 없다.

2. 브라우저 드라이버 다운

브라우저 드라이버가 있어야 테스트를 진행할 수 있다.

다운로드 링크 :  http://chromedriver.chromium.org/downloads

77.0으로 할 경우 에러가 나기 때문에 76.0버전으로 다운받아 주었다.

에러가 나지 않는 드라이버를 찾아서 다운받으면 된다.

다운 받은 파일은 압축을 풀어 쉬운 경로에 두면 된다.

 

웹 조작하기

이제 웹을 조작해볼 차례이다.

이 네이버에 로그인을 하는 예제를 만들 것 이다.

 

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 SeleniumTest {
 
	//WebDriver
	private WebDriver driver;
	private WebElement element;
	private String url;
    
	//Properties
	public static String WEB_DRIVER_ID = "webdriver.chrome.driver";
	public static String WEB_DRIVER_PATH = "D:/chromedriver.exe";
	
	public static void main(String[] args) {
 
 		SeleniumTest test = new SeleniumTest();
	}
    
	public SeleniumTest() {
		//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);
        
		url = "https://www.naver.com";
	}
}

여기 까지는 기본 세팅이다. 

다운받은 chromedriver.exe 위치와 url등을 세팅해 주었으니 페이지에 접속하여 로그인 하는 부분을 만들어 주면 된다.

 

우선 네이버에 접속하여 로그인 버튼 클릭하는 부분까지 만들어 보자

로그인버튼은 a태그로 되어잇고 class 이름이 lg_local_btn로 되어있다.

	public void oper() {
		try {
			//get방식으로 url 요청
			driver.get(url);
			
			//로그인 버튼 클릭
			element = driver.findElement(By.className("lg_local_btn"));
			element.click();
			
			Thread.sleep(10000);
	
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			driver.close();
		}
 
	}

driver.get(url)로 페이지에 접속하여 class 이름이 lg_local_btn인 a태그를 클릭해 주었다.

 

그 다음, 로그인 페이지에서 아이디와 비밀번호를 입력해 주어야 한다.

아이디의 id는 id 패스워드의 id는 pw이다.

			//아이디 입력
			element = driver.findElement(By.id("id"));
			element.sendKeys("아이디 입력");
			
			//패스워드 입력
			element = driver.findElement(By.id("pw"));
			element.sendKeys("비밀번호 입력");

이제 로그인 버튼을 찾아서 submit만 해주면 끝난다.

근데 .. 네이버는 이렇게 로그인을 하니 보안문자를 입력하라고 나온다 ..

 

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 SeleniumTest {
 
	//WebDriver
	private WebDriver driver;
	private WebElement element;
	private String url;
	
	//Properties
	public static String WEB_DRIVER_ID = "webdriver.chrome.driver";
	public static String WEB_DRIVER_PATH = "D:/chromedriver.exe";
	
	public static void main(String[] args) {
 
		SeleniumTest test = new SeleniumTest();
		test.oper();
	}
	
	public SeleniumTest() {
		//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);
		
		url = "https://www.naver.com";
	}
 
	public void oper() {
		try {
			//get방식으로 url 요청
			driver.get(url);
			
			//로그인 버튼 클릭
			element = driver.findElement(By.className("lg_local_btn"));
			element.click();
			
			//아이디 입력
			element = driver.findElement(By.id("id"));Thread.sleep(500);
			element.sendKeys("아이디 입력 ex)test1234");
			
			//패스워드 입력
			element = driver.findElement(By.id("pw"));
			element.sendKeys("비밀번호 입력");
			
			//전송
			element = driver.findElement(By.className("btn_global"));
			element.submit();
			
			Thread.sleep(10000);
	
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			driver.close();
		}
 
	}
 
}

로그인이 돼야 하는데.. 보안문자를 입력하라니 ..

어쨋든 웹 조작은 이런식으로 ....ㅠㅠㅠㅠ