Selenium 새탭 열기 - Selenium saetaeb yeolgi

파이썬으로 배우는 웹스크래핑 01. 웹페이지의 구성 요소 이해 01) 웹서버와 스크래핑 02) HTML 문법의 이해 03) CSS Selector-1 04) CSS Selector-2 05) CSS Selector-3 0x) 스크래핑 주의사항 02. 셀레늄을 사용한 웹스크래핑 01) 셀레늄 환경설정 02) 셀레늄의 이벤트 03) 텍스트 스크래핑 04) 셀레늄의 wait 05) 셀레늄 창전환 06) 셀레늄과 파일I/O 07) 셀레늄과 이미지 08) Headless 크롬 03. REQUESTS를 사용한 웹스크래핑 01) REQUESTS 모듈 02) BEAUTIFULSOUP 모듈 03) 네이버 금융 PER 스크래핑 04) 네이버 뉴스 기사 스크래핑 05) 동적 웹페이지 06) GET/POST 메서드 07) 카카오 쇼핑하기 스크래핑 08) 카카오 번역 스크래핑 09) 다음 금융 일봉 차트 스크래핑 04) 투자지표 04. API를 사용하는 스크래핑 01) 빗썸 API 02) 부동산 실거래가 03) 다트 (Dart) API 05. 네이버 금융 04) encparam 05) 투자지표 05. 미니 프로젝트A (한경컨센서스) 01) 컨센서스 데이터 스크래핑 02) 한글 인코딩 03) 일자별 가격 및 투자 의견얻기 04) 차트에서 일봉 스크래핑 06) 백테스팅 07. FnGuide 01) 종목 코드 02) FnGuide 요약 페이지 03) 재무제표 08. DART (전자공시시스템) 01) 오픈API 인증키 신청 02) 고유번호 03) 기업개황 04) 분류 체계(Taxonomy) 09. 한국은행 경제통계시스템 00) template 01) OPEN API 인증키 신청 02) 100대 통계지표 02) 통계 검색 10) XBRL 01) XBRL 02) XBRL Instance

자바 selenium 사용시 새탭을 열고 싶은 경우가 있다.

탭을 여는 방법은 여러가지 있는데 키보드 이벤트를 이용한 경우와 자바스크립트를 이용하는 경우가 있다.

자바스크립트를 이용하는 경우

((JavascriptExecutor) driver).executeScript("window.open()");

위의 방식으로 새탭을 열고, 새탭의 브라우저도 컨트롤 하고 싶은 경우 tab 을 이동해야 한다.

탭을 이동하는 방법은

ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); // 탭리스트 가져오기 driver.switchTo().window(tabs.get(1)).navigate().to("//www.naver.com");

getWindowHandles 로 탭 리스트를 가져와서 원하는 탭 index 로 이동하면 된다. 탭을 새로 만들었으면 

driver.switchTo().window(tabs.get(1)).navigate().to("//www.naver.com"); // 방금만든 1번 탭으로 이동

로 탭 이동 후 새로운 탭에서 이동하고자 하는 url 로 이동하자.

샘플코드

예시로 탭을 새로 만들고 이미 요청했던 화면을 닫는 코드.

System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH); //Driver SetUp ChromeOptions options = new ChromeOptions(); options.setHeadless(true); options.setCapability("ignoreProtectedModeSettings", true); driver = new ChromeDriver(options); // driver 는 알아서 생성하자. RemoteWebDriver driver = webdriverExecutor.getWebDriver(); for(int i = 1; i < 100; i ++) { driver.get("//juntcom.tistory.com/" + i); ((JavascriptExecutor) driver).executeScript("window.open()"); // 새로운 탭 열기 driver.close(); // 포커스가 첫번째 탭이므로 첫번째 탭이 닫힌다. ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); // 탭리스트 driver.switchTo().window(tabs.get(0)).navigate().to("//www.naver.com"); // 탭이 2개였지만 close로 한개가 없으므로 현재 탭은 1개 그러므로 0번 탭으로 포커스 후 url 이동하자 }

여기서 driver.close 를 하지 않으면 계속해서 새탭이 만들어질 것이다.

get() 메소드는 현재탭에서 url 변경이다.

키 이벤트로 열기

// Open a new tab driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");

컨트롤 T 로 탭을 열 수 있어, 다음과 같이 사용할 수 있다.

반대로 탭을 키 이벤트로 닫을 수도 있다.

Actions action = new Actions(driver); // Close the newly opened tab action.keyDown(Keys.CONTROL).sendKeys("w").perform(); // Switch back to original action.keyDown(Keys.CONTROL).sendKeys("1").perform();

컨트롤 W 는 현재 포커스의 브라우저를 닫는 단축키

컨프롤 숫자는 해당 번호의 순서 탭으로 이동하는 단축키이다.

또한 탭이 많을 경우 제어가 힘들수도 있는데, 원래 탭으로 돌아갈 수 도 있다.

// I had to grab the original handle String originalHandle = driver.getWindowHandle(); // And switch back to the original handle. I am not sure why, but // it just did not work without this, like it has lost the focus driver.switchTo().window(originalHandle);

stackoverflow.com/questions/17547473/how-to-open-a-new-tab-using-selenium-webdriver[새탭열기 및 이동]

Toplist

최신 우편물

태그