안녕하세요.
오늘은 selenium alert 처리 방법에 대해서 알아보도록 하겠습니다.
크롤링을 하다보면 alert이 뜨는 바람에 원하는 로직이 정상적으로 돌아가지 않는 상황을 마주하곤 합니다.
이럴때 어떻게 처리할 수 있을까요?
총 2가지 방법에 대해서 말씀드리겠습니다.
try:
result = browser.switch_to.alert
result.accept() # alert 창 확인 클릭
alert.dismiss() # alert 창 취소 클릭
except:
# alert 없을 시 처리 로직 작성
pass
첫 번째 방법은 selenium 안에 있는 switch_to.alert를 활용하는 방법 입니다.
내가 어떠한 페이지를 클릭 했을 때 alert이 뜬 경우 위와 같은 방법으로 처리할 수 있습니다.
또 다른 방법은 pyautogui를 활용하는 방법입니다.
import pyautogui
try:
browser.get("https://alert.com") # alert가 있는 페이지로 이동 했다고 가정
pyautogui.hotkey('enter') # 보고 있는 페이지 enter를 진행
except:
# alert 없을 시 처리 로직 작성
pass
pyautogui의 경우에는 내가 키보드를 눌러서 처리 하듯 진행하는 방법입니다.
말 그대로 페이지 접근 후 내가 직접 키보드의 enter를 클릭하 듯이 동작합니다.
단점 있다면 alret가 있는 화면으로 활성화를 시켜놔야지만 가능하다는 점 입니다.
그렇기에 2번째 방법 보다는 1번째 방법으로 진행하시는 것을 추천 드립니다!
만일 페이지이동을 했는데 새창으로 페이지가 열렸다면
try:
browser.switch_to.window(browser.window_handles[1])
time.sleep(1)
result = browser.switch_to.alert
result.accept()
time.sleep(2)
except:
pass
위에 있는 코드 처럼 browser.switch\_to.window(browser.window\_handles\[1\])
이동을 해서 진행해야합니다!
그리고 페이지 이동 후 제가 time.sleep(1)
를 걸어 주었는데 또 이 방법 보다는
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
try:
browser.switch_to.window(browser.window_handles[1])
WebDriverWait(browser, 3).until(EC.alert_is_present()) # 경고 창이 있는지를 체크
result = browser.switch_to.alert
result.accept()
time.sleep(2)
except:
pass
WebDriverWait
을 활용하시는 걸 추천 드리겠습니다.
개인적으로 Crawling은 무조건 안정성을 가장 먼저 추구해야한다고 생각하기 때문에 제가 이전에 포스팅한
크롤링 자주 나는 오류
Crawling이란? 페이지 데이터를 추출하는 Scraping과 개념과 달리 페이지에 있는 링크를 따라 새 페이지로 연결되는 것과 새 페이지의 링크를 계속해서 찾아 다른 새 페이지로 연결되는 것을 의미 합
balang.tistory.com
이 포스팅을 보시면서 여러분들의 Crawling Code를 더 안정적으로 구현하시기를 바라겠습니다.
감사합니다.
'python > selenium' 카테고리의 다른 글
Playwright vs Selenium Grid 비교 리포트 (0) | 2025.04.10 |
---|---|
selenium 로봇 피하는 방법 (0) | 2025.03.25 |
크롤링 자주 나는 오류 (1) | 2023.08.24 |