Selenium (셀레니움) 설치 및 실행

2021. 11. 7. 21:56Selenium

Selenium ?

- 셀레니움은 다양한 브라우저 및 플랫폼 에서 웹 응용프로그램을 위한 테스트 도구 입니다.

- 프로그래밍을 통해 마치 사람이 인터넷을 사용하는 것(특정 영역 클릭) 처럼 웹 페이지를 요청하고 응답을 받아올 수 있습니다.

- 웹 크롤링을 할 때 사용 합니다.

 

※ 크롤링 ?
· 데이터를 수집하고, 분류하는 것을 뜻 합니다.
· 주로 인터넷 상의 웹 페이지를 수집해서 분류하고 저장하는 것을 말합니다.
· 즉. 어떤 데이터가 어디에 있는지 등 위치에 대한 분류 작업 입니다.

 

- 결국, 브라우저와 직접 통신하여, 브라우저를 제어하는 데에 사용 합니다.

- "요청 실행하는 버튼 누르기" 라고 생각 하시면 될 것 같습니다.

 

Spring Selenium 환경 만들기

1. Spring 프레임워크를 기반으로 사용할 것이기 때문에 먼저, Maven 에 라이브러리를 추가

"Maven Repository" 에서 "Selenium" 을 검색해 "Selenium-java" 를 찾아 들어가 줍니다.

pom.xml 에 사람들이 많이 사용하는 거 그냥 복사해서 붙여 넣어주면 됩니다. ( 3.141.59 )

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>

2. Web Driver 설치

셀레니움을 사용하려는 브라우저의 드라이버를 다운로드 받아줍니다.

 http://docs.seleniumhq.org/download/ 에 접속해서, 원하는 브라우저의 드라이버를 다운로드 받아 주세요

저는 크롬에서 진행하기 때문에, 크롬 껄로 다운로드 하였습니다.

 

※ 셀레니움은 크롬 or 파이어폭스 가 최적화가 되어 있다고 해요 ~ 익스플로러에서 사용해 봤는데, 크롬에 비해 엄청 느리더라구요 설정 해주는 것도 좀 더 까다롭고...

 

※ 다운로드를 하기 전에 ! 크롬 버전을 확인해 줍니다.

버전을 확인 했다면, 버전에 맞는 드라이버를 다운로드 해주어야 됩니다 ~

제일 앞에 보이는 95 버전 을 맞춰서 다운로드 해주면 되겠네요

둘 중에 마음에 드시는 걸로 ~

각각의 운영체제 맞춰서 다운로드를 해주시면 되는데, windows 64bit 사용하시는 분은 win32 다운로드 해주면 됩니다

다운로드를 한 후, 압축까지 풀어서 사용하고 싶은 경로에 가져다 줍시다

위 까지 완료가 되었다면, 간단하게 실행 및 테스트를 해보도록 합시다

Spring Selenium 실행

저는 Eclipse 에서 Spring 구조를 만들고 실행을 해볼게요 ~

 

Spring MVC 구조로 프로젝트를 만들고, 간단하게 셋팅을 했습니다.

 

네이버에 로그인 까지 하는 걸 시도했는데......

로그인 버튼 클릭, 아이디 입력, 비밀번호 입력 에는 성공 했으나, 캡챠 인증이 나왔습니다.. ㅎㅎㅎㅎ

일단 아래와 같은 방식으로 구현된다는 점 ...

@GetMapping("/openChrome")
	public String openChrome() {
		
		String chromeDriver = "webdriver.chrome.driver"; // 크롬드라이버 명시
		String chromePath = "D:\\chromedriver.exe"; // 셀레니움 크롬 .exe 경로
		
		System.setProperty(chromeDriver, chromePath); // 위의 드라이버 셋팅
		
		//Driver SetUp ( 셀레니움을 막는 것을 방지 )
        ChromeOptions options = new ChromeOptions();
        options.setCapability("ignoreProtectedModeSettings", true);
		
		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver, 30); // Thread.sleep 대신 사용하는 것으로, 대기를 위해 사용
		
		driver.get("https://www.naver.com/"); // get을 통해 해당 url을 open
		
        // 셀레니움을 통한 자동화 일 경우, 에러가 날 수 있으니 try구문에 넣는 것이 좋음
		try {
			
            // 명시적 대기 ( 해당 요소가 나타날 때까지 대기 )
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#account > a")));
			driver.findElement(By.cssSelector("#account > a")).click(); // #account > a 요소를 찾아서 클릭
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("id")));
			driver.findElement(By.id("id")).sendKeys("아이디"); // 해당 요소를 찾아서, 입력
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("pw")));
			driver.findElement(By.id("pw")).sendKeys("비밀번호");
			
			wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("log.login")));
			driver.findElement(By.id("log.login")).click();
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		return "/seleniumTest";
		
	}

 

 

References

https://gdtbgl93.tistory.com/154