🍁Selenium
셀레니움은 자동화 테스트를 하는 도구이다.
이러한 테스트 자동화 도구는 사이트를 만들고 나서 올바르게 동작하는지를 사람 대신에 서핑하면서 제품을 테스트 하는 프로그램을 의미한다.
셀레니움을 사용하기 위해서는 셀레니움 라이브러리와 브라우저 드라이버가 필요하다.
1. 셀레니움 라이브러리
Java Stable: 4.14.1 (October 12, 2023)를 다운로드 받는다.
lib 폴더 내의 라이브러리를 포함한 61개의 라이브러리를 모두 프로젝트 라이브러리 폴더로 이동한다.
2. 브라우저 드라이버
https://chromedriver.chromium.org/downloads
브라우저를 통제하는 브라우저 드라이버를 설치해야 한다.
기본적으로 크롬 브라우저를 지원한다.
크롬 버전 확인
크롬 버전이 다르면 동작이 안 되므로 본인의 버전을 확인한다.
https://googlechromelabs.github.io/chrome-for-testing/#stable
최신 버전인 경우 위 경로에서 본인의 운영체제에 맞는 크롬 드라이버를 다운로드한다.
크롬 드라이버를 dev폴더 내에 넣거나 드라이버가 있는 경로를 기억해 두도록 하자.
Microsoft Edge WebDriver
크롬 드라이버가 안 되는 경우, 엣지 드라이버를 사용한다.
setProperty 등록
//String webDriverID = "webdriver.chrome.driver";
//String path = "C:\\class\\dev\\chromedriver.exe";
String webDriverID = "webdriver.edge.driver";
String path = "C:\\class\\dev\\msedgedriver.exe";
System.setProperty(webDriverID, path);
webDriverID와 path를 setProperty에 등록한다.
webDriverID는 크롬 드라이버, path는 크롬 드라이버가 있는 경로를 작성한다.
WebDriver
//ChromeOptions options = new ChromeOptions();
//options.setCapability("ignoreProtectedModeSteeings", true);
//브라우저 참조 객체
//WebDriver driver = new ChromeDriver(options);
WebDriver driver = new EdgeDriver();
//네이버 화면 출력
String url = "http://naver.com";
driver.get(url);
WebDriver는 브라우저 참조 객체이다.
WebDriver는 chromedriver를 제어하거나 원하는 정보를 얻기 위해 사용한다.
위 코드를 실행하면 엣지 브라우저로 네이버 화면을 띄운다.
findElement, sendKeys 메서드
//네이버 검색 창 입력
WebElement query = driver.findElement(By.id("query"));
query.sendKeys("셀레니움");
findElement 메서드로 태그를 찾고, sendKeys 메서드로 키보드 입력을 구현할 수 있다.
click 메서드
//네이버 검색 버튼 클릭
WebElement btn = driver.findElement(By.className("btn_search"));
btn.click();
click 메서드로 클릭을 구현할 수 있다.
cssSelector 메서드
String webDriverID = "webdriver.edge.driver";
String path = "C:\\class\\dev\\msedgedriver.exe";
System.setProperty(webDriverID, path);
//브라우저 참조 객체
WebDriver driver = new EdgeDriver();
String url = "http://lms1.sist.co.kr/worknet/SLogin.asp";
driver.get(url);
WebElement id = driver.findElement(By.id("strLoginID"));
WebElement pw = driver.findElement(By.id("strLoginPwd"));
id.sendKeys("id");
pw.sendKeys("pw");
WebElement btn = driver.findElement(By.cssSelector("#content > div > form > table > tbody > tr > td > div > div.login-form > div.login-btn > input"));
btn.click();
//페이지 전환 > 딜레이 발생
try {
//driver.wait(1000);
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
WebElement td = driver.findElement(By.cssSelector("#content > div > div > div > div.panel-body > form > table > thead > tr:nth-child(5) > td:nth-child(2)"));
System.out.println(td.getText());
개발자 도구로 Copy Selector를 한 경우 해당 경로의 요소를 cssSelector로 인식할 수 있다.
만약 요소를 잘 인식하지 못한다면 페이지가 전환될 때 딜레이가 발생하므로 잠시 멈춰 주어야 한다.
로그인이 필요한 페이지더라도 Selenium은 사용자의 로그인을 대신 처리할 수 있기 때문에 데이터를 받아 올 수 있다.
jSoup과 Selenium의 특징
jSoup
- 정적 페이지에만 이용할 수 있다.
- 속도가 빠르다.
Selenium
- 모든 페이지에 이용할 수 있다.
- 속도가 느리다.
자바스크립트가 개입되지 않은 정적 페이지 또는 로그인을 하지 않는 미인증 페이지에 연결할 때에는 jSoup을 이용하는 게 좋다.
Selenium은 로그인이 가능하고, 자바스크립트의 동적 컨텐츠도 조작할 수 있으므로 모든 페이지에서 사용할 수 있지만, 속도가 느리다는 단점이 있다.