이번에는 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 : 혹시 더클라임에서 초크 대여했을 때 주는 초크 어떤 제품인지 아시는 분 있나요..? 문래랑 논현에서 대여했는데 두 곳 다 같은 제품 쓰는 것 같더라구요!

 

 

 

728x90
개발자가 되고 싶은 곰