이번에 내 인터파크 매크로 코드를 보면 try ~ except 구문으로 떡칠되어 있는 모습을 볼 수 있다.
아마도 아래와 같은 형태일 것이다.
1 2 3 4 5 6 7 | while True: try: pass # 실행할 구문 except: continue else: break | cs |
셀레니움은 웹페이지가 다 로딩되기 전에 요소를 찾으려고 하면 없다고 예외를 내뿜으면서 꺼진다.
그러나 로딩 속도는 사용자 컴퓨터 성능이나 인터넷 속도 영향을 많이 받고, 때에 따라 다르기 때문에 항상 언제 정확히 몇초 후에 로딩이 될 것이라고 예측할 수가 없다.
보통은 Explicit Waits을 쓰면 되지만, 그래도 불확실성이 완전히 해소된다는 보장도 없고, 내가 써 보니 잘 안되서 위와 같은 형태를 취하게 되었다.
해석하자면 일단 실행할 구문을 무한 루프 안에 가둬 놓고 예외가 나지 않을 때까지(셀레니움에서는 로딩이 끝나 정상적으로 요소를 찾을 수 있을 때까지) 실행한다. 그리고 예외 없이 정상적으로 실행되면 루프를 나간다.
그리고 몇 번 실행하고 더 이상 안되면 꺼버리고 싶을 때, 아래와 같이 for 구문을 사용하면 된다.
1 2 3 4 5 | for i in range(0, time): try: pass except: continue | cs |
무식한 방법처럼 보이지만, 제일 간단하고 정확하다. 오히려 될 때까지 시도한다는 점 때문에 일정 시간이 지나면 포기하는 Explicit Waits와는 다르게 어떻게든 예매창에 들어가기만 하면 좌석을 알아서 선택하고 나오게 된다.
사실 이 방법을 쓰기 전에 고민했는데, 이걸 쓰면 코드가 너무 지저분해지기 때문이다. 당장 구문만 빼고 들어가는 줄 수만 봐도 6줄이나 된다. 이게 몇개씩이나 있어서 코드 가독성을 해친다.
그냥 생각하기 싫을 때나 어떤 일이 있어도 절대로 프로그램이 종료되지 말아야 하는 경우에 쓸 수는 있어도, 가급적이면 다른 방법을 사용하는 것을 권한다.
'프로그래밍 > Python' 카테고리의 다른 글
Python에서 C의 for 구현하기 (0) | 2021.12.21 |
---|---|
온라인 수업을 위한 도우미 프로그램 (2) | 2021.10.07 |
인터파크 티켓팅 매크로 패치 (80) | 2020.07.10 |
Pyinstaller에서 PyQt .ui 파일을 포함해 빌드해야 할 때 (9) | 2020.04.12 |
인터파크 티켓팅 매크로 코드 공유 (11) | 2020.04.11 |
댓글