들어가며
PySide6와 Selenium을 함께 사용해 GUI 애플리케이션을 만들 때,
앱이 종료되더라도 셀레니움 브라우저가 종료되지 않아 crashed
문제가 발생하는 경우가 있었다.
이번 글에서는 애플리케이션 종료 시 브라우저를 안전하게 닫는 방법에 대해 기록해보려고 한다.
해결 방법
셀레니움 브라우저를 안전하게 종료하기 위한 몇 가지 방법이 있다.
대표적으로 closeEvent
메서드 재정의, atexit
모듈 사용, 멀티스레드 환경에서 안전하게 종료하는 방법을 다뤄보겠다.
closeEvent를 활용한 브라우저 종료
PySide6의 closeEvent
메서드를 재정의하여 애플리케이션 창이 닫힐 때 브라우저도 함께 종료되도록 설정해보자.
아래는 예제 코드이다.
from PySide6.QtWidgets import QApplication, QMainWindow
from selenium import webdriver
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Selenium GUI")
self.browser = webdriver.Chrome() # 셀레니움 브라우저 초기화
def closeEvent(self, event):
# 브라우저 종료 코드
if self.browser:
self.browser.quit()
event.accept() # 창 종료 허용
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
위 코드에서는 closeEvent
메서드를 재정의하여 애플리케이션 종료 시 셀레니움 브라우저가 정상 종료되도록 한다.
atexit 모듈을 이용한 자동 종료
atexit
모듈을 사용하면 프로그램 종료 시 자동으로 브라우저를 닫도록 설정할 수 있다.
import atexit
from PySide6.QtWidgets import QApplication, QMainWindow
from selenium import webdriver
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Selenium GUI")
self.browser = webdriver.Chrome()
atexit.register(self.quit_browser)
def quit_browser(self):
if self.browser:
self.browser.quit()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())