셀레니움을 이용해서 웹브라우저 자동화를 만들때에 예상치 못합 팝업창이 떠서 내가 생각한 자동화 로직이 깨질때가 있습니다. 이럴 때는 팝업창을 감지해서 팝업창을 닫아줘야 합니다. 요즘은 팝업창이 자주 발생하지는 않지만 새로운 팝업창 감지는 먼저 새로운 팝업을 알아내려면 이전까지의 브라우저
이렇게 하면 현재 열려있는 브라우저의 탭을 가져올 수 있습니다. tabs는 리스트이며, 현재 탭이 2개라면 2개의 핸들이 들어있게 됩니다. 이렇게 탭이 2개 일 경우 코드를 실행하면 리스트로 된 탭 값을 얻을 수 있습니다.
새로운 팝업, 탭이 오픈이 된 것은
2020 04 19 1) 시간창 대기 3가지보통 시간창 대기는 time.sleep , implicity_wait , Explicit Waits 3가지를 씁니다. time.sleep 은 그냥 지정한 시간만큼 기다린 뒤에 작업을 진행. 파이썬 내장 모듈이죠. implicitly_wait 는 지정한 시간만큼 기다려주고 그 이후는 기다리지 않습니다. Explicit Waits 는 특정 상태가 될때까지 기다리고, 상태가 되면 바로 실행한다는 의미입니다.
2) 팝업창 닫기요즘 사이트들은 팝업창 뜨는 사이트들은 많지 않다고 하는데 내가 크롤링하려는 곳이 팝업창이 있을 수도 있으니 익혀두는 게 좋을 것 같습니다. 우선, 바로 코드 먼저 보시죠. 핵심은 window_handles 입니다. 새로운 탭을 열고 로딩을 기다린뒤 윈도우 목록을 확인해보면 여러 개의 항목이 들어있는 것을 볼 수 있습니다. 메인창과 팝업창이 3개여서 목록 안의 4개의 값이 들어가 있습니다.제가 참고한 강의에서는 팝업창이 하나만 떴는데 제가 실습을 하는 20200419 1800 기준으로는 팝업창이 3개였습니다. { 참고한 동영상과 같은 사이트입니다 :) } 그래서 반복문을 써서 close 시켜주었습니다. switch_to_window 함수는 이름 그대로입니다. 메인으로 선택하는 윈도우 창을 바꿔주는 메서드입니다. 그러니깐 저희가 여러 개의 팝업창이 떠있어도 선택된 창은 하나 잖아요? 그런 걸 의미합니다 :)
참고 https://bit.ly/3bpX6hy https://dejavuqa.tistory.com/110 https://www.youtube.com/watch?v=ItvnZHG_AJk https://www.youtube.com/watch?v=sWTvgJhJ1oQ&t=328s
category IT/Python 2020. 5. 1. 09:10 by JeffreyOh 메인핸들만 제외한 나머지 창(새창, 팝업창 등등) 닫고 메인핸들로 스위칭 후 frame 첫번째까지 스위칭하는 소스 언어별 문법만 바꾸면 다 사용 가능 |