2021. 11. 7. 21:56ㆍSelenium
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