이번에는 href 태그의 주소를 찾아 해당 링크로 들어가는 것이 아닌
태그를 찾아 해당 태그를 클릭해서 페이지를 이동하는 방식으로 진행해보았다.
위 사이트에서 게시판 글 하나 클릭하고 아래 사진에서 글 제목과 내용을가져오는 코드를 작성했습니다.
import java.time.Duration;
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 CrawlingTest5 {
public static void crawling() {
// 1. WebDriver와 ChromeDriver 설정
// 프로젝트 폴더 기준으로 chromedirver.exe 파일의 위치를 작성
//System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe");
//최신 Selenium 에서 는 자동으로 크롬 드라이버를 찾아준다.
WebDriver driver = new ChromeDriver();
// 주소 설정
String url = "https://spiri7.com/climbing/boards?name=%EA%B2%8C%EC%8B%9C%ED%8C%90";
// 웹 페이지 접속
driver.get(url);
// 현재 ChromeDriver의 대기 시간 15초를 부여
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
//게시판 글 클릭을 위해 게시글이 있는 div 태그 가져오기
List<WebElement> board_list = driver.findElements(By.cssSelector("div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1"));
//만약 board_list 가 비여있다면 비어있다고 반환해준다.
if(board_list.isEmpty()) {
System.out.println("비어있음"+board_list);
}
//forEach로 돌리려 했으나.
//driver.navigate().back(); 을 사용하면서
//받아온 List 만큼 for 문을 돌립니다.
for (int i=0; i < board_list.size(); i++) {
//for문 아래 driver.nacigate().back(); 을 사용하기 때문에
//StaleElementReferenceException 요소를 못찾는 오류가 발생할 수 있으니
//다시한번 요소를 찾는 코드를 추가해줍니다.
board_list = driver.findElements(By.cssSelector("div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1"));
//몇번째 요소가 클릭되고 있는지 로그를 찍어줍니다.
System.out.println("로그1 : " + i + " 번째 요소 클릭됨 " + board_list.get(i));
//선택한 요소를 불러와 클릭합니다.
board_list.get(i).click();
//넘어간 페이지에서 게시글 제목이 들어있는 요소를 가져오고
WebElement board_text = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.w-full.max-w-5xl.mx-auto.bg-white.py-4.md\\:py-8 > div.sectionPostHeader > h1")));
//해당 요소가 잘 들어왔는지 확인해줍니다.
System.out.println("로그2 : " + board_text.getText());
//넘어간 페이지에서 게시글 내용이 들어있는 요소를 가져오고
WebElement board_content = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.sectionPostContent.md\\:pt-4.md\\:pb-10.pt-2.pb-8 > div")));
//해당 요소가 잘 들어왔는지 확인해줍니다.
System.out.println("로그3 : " + board_content.getText());
//모든 글 제목 / 내용을 찾고 들어오기전 페이지로 돌아가주고
driver.navigate().back();
//해당 페이지가 로딩될동안 기다려줍니다.
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.w-full > ul > li")));
}
//드라이버 종료
driver.quit();
}
public static void main(String[] args) {
CrawlingTest5.crawling();
}
}
아래는 출력 내용
로그1 : 0 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 정체기 극복 어떻게 하셨나요?
로그3 : 시작해서 1년동안 꾸준하게 성장하다가
근 2개월간 실력이 정체 되어서 고민이네요
더클 보라에서 회색 뚫으신분들 고견이 궁금합니다
로그1 : 1 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 더클 신사 다이노 이벤트 선수들이 하면
로그3 : 검정 가능할까요?
로그1 : 2 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 암벽화 매장
로그3 : 분당에 없나요?
로그1 : 3 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 손상원 클라이밍짐 난이도 표기
로그3 : 제가 판교점은 안 가봤지만,
강남점, 울지로점 둘 다 실제 난이도보다 높게 책정된 것 같아요!
제 생각에
갈색 v6~7 -> v6
핑크 v8 -> v7
이렇게가 맞는 것 같습니다.
다른 분들은 어떻게 생각하시나요?
로그1 : 4 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 서울 버디문제
로그3 : 내일 방문 예정인데 버디 있는곳 추천해주실수 있나요?
로그1 : 5 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 쵸크 대여 가능한 서울/경기남부 암장
로그3 : 쵸크 대여 가능한 서울/경기남부 암장 어디어디 있을까요??
일단 제가 아는 곳은 볼더메이트!
로그1 : 6 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 암벽화 추천해주실분 있나요?
로그3 : 클장 거의 10번 이내로 다녀본 클린이입니다!
더클 기준 빨강정도 클리어하는데 개인 암벽화가 욕심나 사보려고 합니다. 실내 실외용 둘다 되는 클라이밍화가 있을까요? 혹은 클린이가 입문하기 좋을만한 클라이밍화 있으면 소개 부탁드립니다~!!!
로그1 : 7 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 암벽화 추천 부탁드립니다
로그3 : 지금 띠어리 신고있는데 내구성이 안좋은거 같은데 내구성 좋은 신발 추천부탁드립니다.원래 드라고lv사려고 했는데 내구성이 많이 안좋다해서... 자연 안나가고 실내에서 볼더링 위주로 합니다
로그1 : 8 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 정소민 배우님 영상에 나오는 암장 어디인가용?
로그3 : 예전 정소민 배우님 영상 보다가 암장이 나오던데 혹시 어딘지 아시는분 있으신가용?
로그1 : 9 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 홍대 볼프 같이가실분 (3인이상할인)
로그3 : 지금 두명있어요!
오늘 오후 3–4시경 생각중임니다
로그1 : 10 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 수원역 그래비티
로그3 : 퇴근시간 사람많을까용 ? 궁금..
로그1 : 11 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 암장에 강아지
로그3 : 인스타그램 가끔 보면 암장에 강아지들 보이던데 원래 데려가도 되나요? 🤔
로그1 : 12 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 성수 클팍 8회권 양도합니다
로그3 :
로그1 : 13 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 더클 지점중 꿀더클이 어딘가요?
로그3 : 더클 고수님들~
더클지점들중에 비교적 꿀,불이 어디일까요??
무브별로 다르겠지만 대체적인 느낌만이라도..
(꿀빨강 많은곳 찾아여)
로그1 : 14 번째 요소 클릭됨 [[ChromeDriver: chrome on windows (6c4af3de2393a66028e7ab71fef23856)] -> css selector: div.w-full > ul.w-full > li.w-full > .postContent > div > div.w-full.text-base.font-bold.mb-1]
로그2 : 더클라임 대여 초크
로그3 : 혹시 더클라임에서 초크 대여했을 때 주는 초크 어떤 제품인지 아시는 분 있나요..? 문래랑 논현에서 대여했는데 두 곳 다 같은 제품 쓰는 것 같더라구요!
'추가 공부 > Web' 카테고리의 다른 글
JSP Selenium 사용해보기 3 Naver 지도 크롤링 (0) | 2024.09.11 |
---|---|
JAVA에서 mkdir 사용해보기 (0) | 2024.09.10 |
JSP Selenium 사용해보기 1 (0) | 2024.09.02 |
JSP Selenium 설정 및 연습 사이트 찾기 (1) | 2024.09.02 |
2023년 3월 이후 새로 개설된 JavaScript importmap (1) | 2024.09.02 |