Selenium 브라우저가 자동으로 종료되는 이유와 해결책
Selenium으로 브라우저를 실행한 직후 창이 사라지는 현상은 자동화 초기에 자주 발생합니다. WebDriver 세션, 스크립트 생명 주기, 예외 처리, 외부 환경 등 여러 요인이 복합적으로 작용할 수 있으므로 원인별로 점검해야 합니다.
1. 스크립트 종료로 인한 세션 해제
Python 프로세스가 종료되면 WebDriver 세션이 함께 사라지며, 이 과정에서 브라우저 창도 닫힐 수 있습니다. 브라우저를 계속 띄워두려면 프로세스가 끝나지 않도록 적절한 로킹 지점을 두는 것이 좋습니다.
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
opts = Options()
opts.add_argument("--start-maximized")
svc = Service("C:/path/to/msedgedriver.exe")
browser = webdriver.Edge(service=svc, options=opts)
browser.get("https://example.com")
input("Enter를 누르면 브라우저를 종료합니다.")
browser.quit()
2. quit() 또는 close()가 어 있는 경우
의도하지 않은 위치에서 browser.quit()나 browser.close()가 호출되면 브라우저가 즉시 닫니다. 디버깅할 때는 일시적으로 주석 처리하거나, 자원 해제 위치를 명확하게 분리하세요.
from selenium import webdriver
from selenium.webdriver.edge.service import Service
svc = Service("C:/path/to/msedgedriver.exe")
browser = webdriver.Edge(service=svc)
try:
browser.get("https://example.com")
# 추가 자동화 작업
finally:
# 디버깅 중에는 닫지 않도록 주석 처리
# browser.quit()
pass
3. 예외 미처리로 인한 비정상 종료
페이지 로딩, 요소 검색 등에서 예외가 발생하면 스크립트가 중단되면서 브라우저가 그대로 닫힐 수 있습니다. try...except...finally 구조로 예외를 잡고, 필요하면 스크린샷과 스택 트레이스를 남깁니다.
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import traceback
svc = Service("C:/path/to/msedgedriver.exe")
browser = webdriver.Edge(service=svc)
try:
browser.get("https://example.com")
# 이후 작업
except Exception as err:
print(f"오류 발생: {err}")
# browser.save_screenshot("error.png")
traceback.print_exc()
finally:
# browser.quit()
pass
4. WebDriver 세션 타임아웃
오랜 시간 동안 명령을 보내지 않으면 WebDriver와 브라우저 간 연결이 끊길 수 있습니다. 짧은 주기로 상호작용을 주거나, keep_alive 션을 활용할 수 있습니다.
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
opts = Options()
opts.add_argument("--start-maximized")
svc = Service("C:/path/to/msedgedriver.exe")
browser = webdriver.Edge(service=svc, options=opts)
browser.service.keep_alive = True
5. 드라이버-브라우저 버전 불일치 또는 경로 문제
WebDriver의 버전이 설치된 브라우저 버전과 지 않거나, 드라이버 경로가 잘못되면 브라우저가 곧바로 종료됩니다. 예를 들어 Edge 114을 사용 중이라면 대응하는 msedgedriver가 필요합니다.
from selenium import webdriver
from selenium.webdriver.edge.service import Service
svc = Service("C:/path/to/msedgedriver.exe")
browser = webdriver.Edge(service=svc)
6. 외부 프로세스에 의한 강제 종료
백신, 방화벽, 작업 관리자 등 다른 프로그램이 브라우저 프로세스를 강제로 종료할 수 있습니다. 임시로 백신을 비활성화하거나, 작업 관리자에서 예상치 못한 프로세스를 확인하세요.
7. 디버깅 팁
- 주요 단계마다 로그를 출력해 어느 시점에서 브라우저가 닫히는지 확인합니다.
- IDE의 중단점을 활용해 한 줄씩 실행하면서 브라우저 상태를 관찰합니다.
- 예외 발생 시
traceback.print_exc()로 상세 오류를 기록합니다.
print("브라우저 열기")
browser = webdriver.Edge(service=svc)
print("페이지 이동")
browser.get("https://example.com")