Selenium 라우저 자동 종료 원인과 해결 방안

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")

태그: selenium webdriver Edge python BrowserAutomation

8월 18일 04:48에 게시됨