2019년 9월 30일 월요일

[Selenium] 1. Java와 Firefox를 이용하여 Google검색 자동화 하기

개요

Selenium은 브라우저를 자동화 할 수 있는 도구이며
일반적으로 이를 이용하여 자동화 테스트를 수행하거나 웹 크롤링 등을 수행할 수 있습니다.

해당 가이드에서는 Java와 Selenium, Firefox Driver를 사용하여
구글에 접속 후 검색어를 입력하고 검색하는 테스트 코드를 작성합니다.

해당 가이드는 다음과 같은 준비물이 필요합니다.
  • Java JDK
  • Eclipse IDE
  • Firefox Web Browser (다른 브라우저도 사용 가능하지만 해당 가이드에서는 Firefox를 이용한 방법을 다룹니다. Firefox외의 브라우저는 https://www.seleniumhq.org/download/에서 해당 브라우저에 맞는 Web Driver를 찾으시길 바랍니다.)

프로젝트 생성

예제 작성을 위한 프로젝트를 생성합니다.
메뉴의 File - New - Project...를 클릭한 뒤 Maven Project를 선택합니다.
Eclipse New Project Window
아래와 같이 프로젝트 정보를 입력한 후 프로젝트를 생성합니다.
Eclipse New Maven Project Window

Web Driver 다운로드

https://github.com/mozilla/geckodriver/releases에 접속하여 자신의 OS에 맞는 Firefox 드라이버를 다운로드 받습니다.
geckodriver releases Assets Download Page

다운받은 압축파일을 해제한 뒤 geckodriver 파일을 프로젝트의 resources 폴더로 이동시킵니다.
geckodriver on resources folder picture
geckodriver는 Linux 계열, geckodriver.exe는 Windows 계열 OS에서 사용 가능한 파일입니다. 필요한 Driver만 다운로드하여 추가하면 됩니다.

Selenium 의존성 추가

pom.xml 파일의 dependencies 태그 내에 다음 내용을 추가하여 Selenium을 사용하기 위한 Maven 의존성을 추가합니다.

<dependency>
 <groupId>org.seleniumhq.selenium</groupId>
 <artifactId>selenium-java</artifactId>
 <version>${selenium.version}</version>
</dependency>

Selenium은 문서 작성 기준 3.141.59버전을 사용했습니다.

자동화 테스트 작성

의존성 추가 후 Selenium을 테스트하는 간단한 예제를 작성해봅니다.

다음은 Firefox Driver를 생성하고
Google에 접속한 뒤 "Selenium WebDriver"검색하여 나온 결과를
로그에 소스 코드로 출력하는 예제입니다.

코드를 실행하기 전 GECKO_DRIVER_PATH를 resources 폴더에 추가한 geckodriver 파일명에 맞도록 수정해야 합니다.

package com.jeent.alcohol;

import java.nio.file.FileSystems;
import java.nio.file.Path;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class SeleniumTests {
 

public static final String DRIVER_PROPERTY = 
   "webdriver.gecko.driver";

 // TODO: resources 폴더 내의 geckodriver파일명에 맞춰 수정해줍니다.
public static final String GECKO_DRIVER_PATH = "src/main/resources/geckodriver.exe"; public static void main(String[] args) { Path path = FileSystems.getDefault().getPath(GECKO_DRIVER_PATH); System.setProperty(DRIVER_PROPERTY, path.toString()); WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.com"); driver.findElement(By.name("q")).sendKeys("Selenium WebDriver"); driver.findElement(By.name("f")).submit(); new WebDriverWait(driver, 20).until( ExpectedConditions.visibilityOfElementLocated(By.id("resultStats"))); String source = driver.getPageSource(); System.out.println(source); } }

main 메서드를 실행하면 Firefox 브라우저가 실행되면서 예제 코드에서 작성한 동작이 수행되는 것을 확인할 수 있습니다.

Selenium을 활용하면 브라우저를 제어 할 수 있는 것 뿐만 아니라, 브라우저에 출력되는 내용을 읽어서 데이터화하는 크롤링 작업도 가능합니다.

다음 가이드에서는 예제에서 사용된 WebDriverWait 클래스의 용도를 자세히 알아보고 이어서 유튜브 재생목록을 크롤링하는 예제를 작성해 보도록 하겠습니다.

댓글 없음:

댓글 쓰기