1. Selenium, 웹 애플리케이션 테스트를 위한 프레임워크
- Selenium 주입
- maven : https://mvnrepository.com/artifact/org.seleniumhq.selenium
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.141.59</version>
</dependency>
<!-- chrome-driver 사용 예정 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
- 크롬 드라이버 다운로드
2. Selenium 기본 구조
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
private WebDriver driver;
// 드라이버 설정
public static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
// 드라이버 경로 지정
public static final String WEB_DRIVER_PATH = "D:/devtools/chromedriver_win32/chromedriver.exe";
// Selenium으로 탐색할 URL
private String base_url;
public SeleniumTest() { // 생성자를 통한 값 할당
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
driver = (WebDriver) new ChromeDriver();
base_url = "탐색하고자 하는 사이트의 url";
}
public void crawl() throws Exception {
driver.get(base_url); // url을 가져온다.
// 이하 크롤링 코드 작성 ...
}
public static void main(String[] args) throws Exception {
new SeleniumTest().crawl(); // main에서 메서드 crawl()을 실행하면 크롤링 시작!
}
}
3. Selenium 기본 문법
1) element, elements : Selenium으로 탐색한 객체
// DOM에서 탐색한 객체 저장
WebElement element = driver.findElement( /* 한 개의 값 */ );
List<WebElement> elements = driver.findElements( /* 복수 개의 값 */ );
element.click(); // 해당 객체 클릭
element.getText(); // 해당 객체의 텍스트 반환
element.getAttribute("이름") // 해당 객체의 attribute 반환
elements.getSize(); // 해당 객체의 개수 반환
2) By : DOM 객체 탐색 방법
// 많이 쓰이는 방법
By.cssSelector(".restaurant-list > div"); // css 셀렉터로 탐색
By.ByXPath("//*[@id='cntntsView']/div[1]"); // 경로로 탐색
By.id("content"); // id 속성으로 탐색
By.tagName("table"); // tag 명으로 탐색
By.name("address_input"); // name 속성으로 탐색
By.className("restaurant-list"); // class 속성으로 탐색
By.linkText("현재 위치로 설정합니다."); // 링크가 있는 텍스트 탐색