Вот ситуация:Закрытие Селен Браузер, который был открыт в дочернем процессе
создать дочерний процесс, который открывает и занимается с WebDriver. Детский процесс является исчерпывающим и может привести к ошибке, и в этом случае он будет немедленно закрыт, и управление будет возвращено основной функции. Однако в этой ситуации браузер все равно будет открыт (так как дочерний процесс никогда не завершался полностью). Как закрыть браузер, который инициализируется в дочернем процессе?
подходов я пытался до сих пор:
1) Инициализация WebDriver в основной функции и передавая ее дочерний процесс в качестве аргумента.
2) Передача webdriver между дочерним и родительским процессом с использованием очереди.
Код:
import multiprocessing
def foo(queue):
driver = webdriver.Chrome()
queue.put(driver)
# Do some other stuff
# If finicky stuff happens, this driver.close() will not run
driver.close()
if __name__ == '__main__':
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=foo, name='foo', args=(queue,))
# Wait for process to finish
# Try to close the browser if still open
try:
driver = queue.get()
driver.close()
except:
pass
вы можете использовать метод driver.quit() для закрытия браузера – Piyush
Нет, это не закроет браузер. Драйвер инициализируется в дочернем процессе, который иногда «зависает». Это означает, что 1) driver.quit() не всегда будет достигнут, если я положу его в foo(), 2) driver.quit() будет бессмысленным, если я поместил его в основную функцию, поскольку драйвер был инициализирован в отдельном обработать. –