본문 바로가기

카테고리 없음

[ JAVA Selenium 크롤링 ] 현재 URL, 이동 후 URL 가져오기

문제 발생 

 

Selenum으로 A URL -> B URL 이동 후 현재 URL 값을 구하고자 했다.

 

Java에서는

 

driver.getCurrentUrl()

 

현재 URL에 접근할 수 있다.

 

따라서 A URL -> B URL 이동 후 getCurrentUrl() 사용시 B URL이 반환 될 것이라 기대했다.

 

하지만 결과는 A URL 이었다.

 

 

원인 파악

 

내가 간과했던 점은 URL 이동 동작 방식을 정확히 인지하지 못했다는 점이다.

 

URL 동작 방식에는

 

- 현재 페이지에서 해당 URL로 이동
- 추가 페이지를 생성 [ TAB ]

 

2가지 경우가 있다. 그리고 나는 2번째였다.

 

B URL로 이동하는 WebElements를 클릭했을 때 A -> B로 변환되는 것이 아니라 A는 그대로 있고 B가 추가로 생성되었다.

WebDriver는 여전히 A를 바라보고 있었고 따라서 getCurrentUrl() 시 결과 값이 A였던 것이다.

.

 

 문제 해결

 

// Tab 목록 조회 
Set<String> tabSet = driver.getWindowHandles();

// Set 조회를 위한 Iterator 생성
Iterator<String> it = tabSet.iterator();

// Set -> List로 변환
List<String> tabList = new ArrayList<>();

while (it.hasNext()) {
    tabList.add(it.next());
}
// tab List : [CDwindow-E54311E271EF8049EE0901CFE172BF4B, CDwindow-CC66C40C1F65C87F300BBAD45376FAA3]

// 2번째 탭으로 이동 [지도]
driver.switchTo().window(tabList.get(1));

 

코드 설명

1. driver.getWindowHandles()로 Tab 리스트 데이터를 조회한다.

2. driver.switchTo().window()로 WebDriver가 2 번째 페이지 즉 B URL을 바라볼 수 있도록 한다.

3. driver.getCurrentUrl()로 현재 URL을 조회한다.

 

 

생각해 볼 점

 

나는 크롤링을 할 때

 

options.addArguments("--disable-popup-blocking");       //팝업안띄움
options.addArguments("--disable-gpu");            //gpu 비활성화
options.addArguments("--blink-settings=imagesEnabled=false"); //이미지 다운 안받음
options.addArguments("--headless");
options.addArguments("--no-sandbox"); // linux 용
options.addArguments("--disable-dev-shm-usage"); //linux 용

 

해당 옵션으로 실제 화면이 출력되는 것을 지양해왔다. ( 테스트 시 시간이 오래 걸리므로 )

 

하지만 해당 이유로 원인분석에 상당한 시간이 걸렸다.

 

크롤링 시에는 시간이 좀 걸리더라도 내가 의도한대로 동작하는지 창을 확인하면서 개발하는게 좋지 않을까 생각해본다.