Я пишу код на Python, где мне нужен веб-браузер селена внутри одного из моих классов.Я хочу, чтобы сеанс селена завершался правильно при выходе из python
Я сохраняю переменную webbrowser как поле моего класса.Чтобы выйти из сеанса, я решил вызвать метод quit()
веб-браузера внутри метода __del__()
моего класса, но он не сработал:
from selenium import webdriver
from sys import stderr
class MyClass:
def __init__(self):
opts = webdriver.chrome.options.Options()
opts.add_argument('--headless')
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-dev-shm-usage')
assert opts.headless
self.browser = webdriver.Chrome(options=opts)
def __del__(self):
self.browser.quit()
stderr.write("Browser has been closed correctly!\n")
# Other methods of my class
if __name__ == "__main__":
a = MyClass()
Если сейчас я вызываю что-то вроде del a
, Я получаю сообщение Browser has been closed correctly!
и chromedriver
исчезает из списка запущенных процессов.Но если я выхожу из Python, я получаю сообщение об ошибке:
Exception ignored in: <bound method MyClass.__del__ of <__main__.MyClass object at 0x7f37eb918898>>
Traceback (most recent call last):
File "<stdin>", line 11, in __del__
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/chrome/webdriver.py", line 158, in quit
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 151, in stop
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 122, in send_remote_shutdown_command
ImportError: sys.meta_path is None, Python is likely shutting down