웹 스크래핑을 하다보면 사이트에 따라 아래와 같이 여러개의 팝업창이 뜨는 경우가 있는데요.
이때 팝업창들을 닫기 위해서는 어떻게 해야 할까요?
1) url접속 코드 작성
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = "http://www.riss.kr"
driver.get(url)
time.sleep(2)
위와 같이 url에 접속 하는 코드를 먼저 작성 해줍니다.
(혹시 Service를 이용해 웹드라이브를 설정한 부분이 낯선분은 해당 포스팅을 참고하기 바랍니다.)
2) driver.window_handles를 이용하여 현재 떠있는 창 확인
driver.window_handles를 이용하면 현재 떠 있는 창을 확인할 수 있습니다.
output:
output을 확인해보면 뭔지는 모르겠으나 리스트에 3개 값이 들어 가있는 것을 알 수 있습니다.
이는 현재 브라우저에 3개의 창이 활성화 되어있다는 의미인데요.
여기서 알아야할건 리스트 첫번째 값이 팝업창이 아닌 메인 윈도우 창이라는 것입니다.
그렇다면 메인 윈도우창을 제외한 다른 팝업창들을 어떻게 닫을 수 있을까요?
3) 팝업창 종료
위 코드와 같이 for loop를 돌면서 리스트의 첫번째 값, 즉 메인 윈도우창이 아닌 경우를 걸러냅니다.
그러면 팝업 창들만 걸러지겠죠.
여기서 그 팝업창들을 제어하기위해서는 switch_to.window()함수를 이용합니다.
그렇게 되면 셀레니움이 해당 창을 제어할 수 있게 되고, close() 함수를 통해 각각의 창들을 닫을 수 있습니다.
이 행위를 for loop를 돌면서 반복하는 거죠.
팝업창들을 모두 닫은 후에는 다시 메인창에서 크롤링 작업해야 함으로 swtich_to.window()함수를 메인창에 다시 적용시켜줍니다.
output:
팝업창들만 정상 종료 되는것을 확인할 수 있습니다.
'파이썬 > 크롤링' 카테고리의 다른 글
[셀레니움] 크롬드라이버 자동 업데이트 방법 2가지 (0) | 2023.02.06 |
---|---|
[셀레니움] 구글 로그인 성공하기(with undetected-chromedriver) (0) | 2023.02.06 |
[크롤링 기초] svg 태그 찾기 (with xpath 셀레니움) (1) | 2022.04.19 |
[셀레니움 기초] 네이버 쇼핑 크롤링 중 차단?(headless 사용시 주의사항) (0) | 2022.04.07 |
[셀레니움 기초] StaleElementReferenceException 오류 해결 (0) | 2022.04.07 |
댓글