초기 세팅 필요
chrome driver
,Selenium
등 설치- maven 프로젝트로 변경 등 ...
🍯 이클립스 꿀팁
ctrl
+shift
+o
: 작성된 코드에 필요한 패키지 자동 임포트ctrl
+space bar
: 코드 자동완성 제안Alt
+상하 방향키
: 해당 코드를 윗줄 아랫줄로 이동ctrl
+shift
+f
: 들여쓰기 포맷 자동 정리ctrl
+Alt
+ 방향키 : 해당 행을 복사해서 위아랫줄에 붙여넣기
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium_test {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 10); // 10초동안 기다리도록
// naver에 들어가기
driver.get("https://www.naver.com");
// 증권 페이지에 들어가기
WebElement financeBtn = driver.findElement(By.cssSelector("#shortcutArea > ul > li:nth-child(6) > a"));
financeBtn.click();
// 열려있는 윈도우 창을 리스트로 받아와서 index=1인 윈도우(증권)로 이동
List<String> handleList = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(handleList.get(1));
// 주식 이름으로 검색하기
WebElement searchInput = driver.findElement(By.cssSelector("#stock_items"));
searchInput.sendKeys("삼성전자");
searchInput.sendKeys(Keys.ENTER);
// 가격 찾아서 출력 (화면에 뜰 때까지 기다린 후)
WebElement price = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"content\"]/div[4]/table/tbody/tr[1]/td[2]")));
System.out.println(price.getText());
}
}
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
// ctrl + shift + o : 자동 임포트
public class Selenium_test {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 10); // 10초동안 기다리도록
// naver에 들어가기
driver.get("https://www.naver.com");
// 증권 페이지에 들어가기
WebElement financeBtn = driver.findElement(By.cssSelector("#shortcutArea > ul > li:nth-child(6) > a"));
financeBtn.click();
// 열려있는 윈도우 창을 리스트로 받아와서 index=1인 윈도우(증권)로 이동
List<String> handleList = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(handleList.get(1));
// 기사 제목 목록 받아와서 출력하기
List<WebElement> newsTitle = driver.findElements(
By.cssSelector("#content > div.article > div.section > div.news_area._replaceNewsLink > div > ul a"));
for (int i = 0; i < newsTitle.size(); i++) {
System.out.println(newsTitle.get(i).getText());
}
}
}
사실 예매까지는 아직 .. >>도착역과 출발역을 지정하여 오늘 열차 검색하기<<
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
// import org.openqa.selenium.support.ui.WebDriverWait;
public class SRT_ticket {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
// WebDriverWait wait = new WebDriverWait(driver, 10); // 10초동안 기다리도록
// srt 사이트에 들어가기
driver.get("https://etk.srail.kr/main.do");
// 팝업창 닫기
String strMain = driver.getWindowHandle();
System.out.println(strMain);
for (String handle : driver.getWindowHandles()) {
if (!handle.equals(strMain)) {
driver.switchTo().window(handle); // main이 아닌 창으로 가서
driver.close(); // 해당 창 닫기
}
}
driver.switchTo().window(strMain); // 다시 메인 화면으로 돌아오기
// 출발역 지정 (토글 목록에서 선택)
Select departure = new Select(driver.findElement(By.cssSelector("#dptRsStnCd")));
departure.selectByVisibleText("동대구");
// 도착역 지정 (토글 목록에서 선택)
Select arrival = new Select(driver.findElement(By.cssSelector("#arvRsStnCd")));
arrival.selectByValue("0551"); // ALT + 방향키 : 코드 위치 위아래로 수정
// 조회하기 버튼 누르기
WebElement searchBtn =
driver.findElement(By.cssSelector("#search-form > fieldset > a"));
searchBtn.click();
}
}
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ITnewsCheck {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 3);
// naver에 들어가기
driver.get("https://www.naver.com");
// 뉴스홈 페이지에 들어가기
WebElement newsHomeBtn = driver.findElement(By.cssSelector("#newsstand > div.ContentHeaderSubView-module__content_header_sub___Yszwk > div.ContentHeaderSubView-module__sub_home___QWIkL > a:nth-child(2)"));
newsHomeBtn.click();
// 탭 포커스 옮기기
List<String> handleList = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(handleList.get(1));
// IT/과학 탭 클릭
WebElement ITscBtn = driver.findElement(By.cssSelector("body > section > header > div.Nlnb._float_lnb > div > div > div > div > div > ul > li:nth-child(6) > a"));
ITscBtn.click();
// IT일반 탭 클릭
WebElement generalITBtn = driver.findElement(By.cssSelector("#ct_wrap > div.ct_scroll_wrapper > div.column0 > div > ul > li:nth-child(4) > a"));
generalITBtn.click();
// 뉴스 리스트에 담기
List<WebElement> newsTitle = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.cssSelector("ul.sa_list > li > div > div > div.sa_text > a > strong")));
// 뉴스 링크 담기
List<WebElement> newsLink = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.cssSelector("ul.sa_list > li > div > div > div.sa_text > a ")));
// 뉴스 제목과 링크 동시에 출력하기
System.out.println("<현재 시각 IT 이슈 한 눈에 보기>\n");
for (int i = 0; i < newsTitle.size(); i++) {
String title = newsTitle.get(i).getText();
String link = newsLink.get(i).getAttribute("href");
System.out.println("#" + (i+1));
System.out.println(title);
System.out.println(link);
System.out.println("-------------------------------------------------");
}
}
}
import java.awt.Desktop;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ITnewsCheck {
public static void main(String[] args) throws IOException {
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 3);
// naver에 들어가기
driver.get("https://www.naver.com");
// 뉴스홈 페이지에 들어가기
WebElement newsHomeBtn = driver.findElement(By.cssSelector("#newsstand > div.ContentHeaderSubView-module__content_header_sub___Yszwk > div.ContentHeaderSubView-module__sub_home___QWIkL > a:nth-child(2)"));
newsHomeBtn.click();
// 탭 포커스 옮기기
List<String> handleList = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(handleList.get(1));
// IT/과학 탭 클릭
WebElement ITscBtn = driver.findElement(By.cssSelector("body > section > header > div.Nlnb._float_lnb > div > div > div > div > div > ul > li:nth-child(6) > a"));
ITscBtn.click();
// IT일반 탭 클릭
WebElement generalITBtn = driver.findElement(By.cssSelector("#ct_wrap > div.ct_scroll_wrapper > div.column0 > div > ul > li:nth-child(4) > a"));
generalITBtn.click();
// 뉴스 리스트에 담기
List<WebElement> newsTitle = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.cssSelector("ul.sa_list > li > div > div > div.sa_text > a > strong")));
// 뉴스 링크 담기
List<WebElement> newsLink = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.cssSelector("ul.sa_list > li > div > div > div.sa_text > a ")));
// html로 웹페이지 만들기
// html 문자열 생성
StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html>\n<html lang='ko'>\n<head>\n<meta charset='UTF-8'>\n");
html.append("<title>IT 뉴스 요약</title>\n</head>\n<body>\n");
html.append("<h2> 현재 시각 IT 이슈 한 눈에 보기</h2>\n<ul>\n");
for (int i = 0; i < newsTitle.size(); i++) {
String title = newsTitle.get(i).getText();
String link = newsLink.get(i).getAttribute("href");
html.append("<li>\n");
html.append("<a href='" + link + "' target='_blank'>" + title + "</a>\n");
html.append("</li>\n");
}
html.append("</ul>\n</body>\n</html>");
// 파일 저장
String fileName = "ITNews.html";
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
writer.write(html.toString());
System.out.println("HTML 파일 생성 완료: " + fileName);
}
// 브라우저로 열기
File file = new File(fileName);
if (file.exists()) {
Desktop.getDesktop().browse(file.toURI());
}
driver.quit();
}
}