#python #python-3.x #selenium #selenium-webdriver #with-statement
#python #python-3.x #selenium #selenium-webdriver #с помощью инструкции
Вопрос:
Часть моего скрипта удаляет результаты из Selenium WebDriver, и поскольку предполагается, что мой код будет выполняться вечно (пока я его не закрою) На самом деле у меня нет способа реализовать driver.quit()
метод. Я пытался сделать это с помощью инструкции «with», но драйвер просто закрывается после init_driver()
выполнения:
from selenium import webdriver
def init_driver():
driver = webdriver.Firefox(executable_path='geckodriver.exe')
driver.get('https://www.lsbet.com/live')
return driver
while True:
with init_driver() as driver:
... # Do something
Ответ №1:
Может быть, это
with init_driver() as driver:
while True:
#...Do stuff
if condition == False:
driver.quit()
break
Ответ №2:
Я думаю, вы можете, в частности, использовать contextlib из стандартной библиотеки, чтобы фактически реализовать свою init_driver
функцию в качестве менеджера контекста.
Например, используя простейший способ с @contextlib.contextmanager
декоратором, это может быть что-то вроде :
from contextlib import contextmanager
@contextmanager
def init_driver(options, profile):
try:
driver = webdriver.Firefox(executable_path='geckodriver.exe')
driver.get('https://www.lsbet.com/live')
yield driver
finally:
# code to close/quit your driver
pass
(обратите внимание на использование yield
вместо return
)
Ответ №3:
Вы можете использовать диспетчер контекста.
class SeleniumManager:
def __init__(self):
pass
def __enter__(self):
# Setup logic goes here...
print('I have started...')
def __exit__(self, exc_type, exc_val, exc_tb):
# Teardown logic goes here...
print('I am finished...')
with SeleniumManager() as sm:
# Your logic here...
print('I am working on something...')
После завершения вашей логики в инструкции with диспетчер контекста автоматически вызовет метод exit().