과제를 진행하면서 맞닥드렸던 문제상황에 대한 대처방법을 공유하고자 한다.
(사실 과제를 수행하는데 필요없는 코드이고 애써 찾은것을 그냥 지우기 아까워서 여기다 쓰는거다)
selenium으로 크롤링을 진행하다가 검색할 키워드를 검색창에 입력하고 잘 되는 것을 확인한 뒤 반복문을 이용하여 여러번 수행하던 차에 아래와 같은 창을 맞닥드리게 되었다.
Alert창이 발생했을 때, '확인' 버튼을 누르는 코드는 그리 어렵지 않았지만, Alert창이 발생 했는지 여부를 체크하는 것이 어려웠다. 공식문서를 찾아보니 expected_conditions에 alert_is_present() 함수가 있긴 했지만, 적절한 예제가 없었기에 바로 써먹을 수는 없었다.
해결 방법은 생각보다 간단했다. try~except 문장를 사용해서 Alert창으로 이동을 시도하고 되면 창을 확인(accept)하고 안되면 pass하는 방법으로 처리했다.
try:
result = driver.switch_to.alert()
result.accept()
except:
pass
과제 제출 이후에 expected_conditions 모듈에 대해 확인해보니 위와 같은 상황에서는 아래 같은 방법으로 사용할 수 있을 같다. 하지만, 위의 try~except에 비해 좀 불완전해 보인다. (다른 방법이 생각나면 테스트해보고 업데이트 하겠다.)
import time
from selenium.webdriver.support import expected_conditions as EC
time.sleep(1)
if EC.alert_is_present():
result = driver.switch_to.alert()
result.accept()