Python
Python сразу закрывает браузер: как исправить в Selenium и обычном запуске
Если Python открывает браузер и сразу закрывает его, почти всегда причина простая: скрипт дошел до конца. Когда программа заканчивается, Selenium-сессия завершается, а окно браузера закрывается
Для первой проверки добавьте паузу перед закрытием
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
input("Нажмите Enter, чтобы закрыть браузер")
browser.quit()
Теперь браузер останется открытым, пока вы не нажмете Enter в терминале
Почему браузер закрывается сразу
Типичный учебный код выглядит так
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
browser.quit()
Python запускает Chrome, открывает страницу и сразу выполняет browser.quit(). Команда quit() закрывает весь браузер, а не только вкладку
Если убрать quit(), окно может остаться открытым на время, но это плохая привычка для реальных скриптов. Лучше явно поставить паузу на время отладки, а потом возвращать корректное закрытие
Быстрое решение для новичка
Поставьте input() перед закрытием
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.python.org/")
input("Браузер открыт. Нажмите Enter для завершения")
browser.quit()
Что происходит
- Python открывает Chrome
- переходит на сайт
- останавливается на
input() - ждет, пока вы нажмете Enter
- после Enter выполняет
browser.quit()
Так вы успеваете посмотреть страницу и понять, что скрипт вообще сработал
Временная пауза через time.sleep()
Если не хотите нажимать Enter руками, можно поставить задержку
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.get("https://example.com")
sleep(10)
browser.quit()
Браузер будет открыт примерно 10 секунд
Для учебной проверки это нормально. Для серьезной автоматизации лучше использовать ожидания Selenium, а не слепой sleep()
Что делать, если браузер закрывается без quit()
Иногда код выглядит так
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
И окно все равно закрывается после завершения программы. Это ожидаемо: WebDriver живет внутри процесса Python. Когда процесс заканчивается, управляющая сессия тоже может завершиться
Поэтому для отладки все равно ставьте паузу
input("Проверяем страницу. Нажмите Enter для выхода")
Как оставить Chrome открытым после завершения скрипта
Для Chrome можно использовать экспериментальную опцию detach
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("detach", True)
browser = webdriver.Chrome(options=options)
browser.get("https://example.com")
После завершения Python окно Chrome может остаться открытым
Но для новичка это не лучший основной путь. Такой браузер потом легко забыть закрыть, а скрипт может оставлять лишние процессы. Для обучения понятнее input()
Если браузер закрывается из-за ошибки
Еще одна частая ситуация: браузер открылся, код упал с ошибкой, программа завершилась, окно исчезло
Запустите скрипт из терминала, а не двойным кликом по файлу
python main.py
Так вы увидите ошибку в консоли
Если запускаете двойным кликом, окно терминала тоже может быстро закрыться. Поэтому для диагностики всегда открывайте терминал вручную
Правильный шаблон для учебного Selenium-скрипта
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
try:
browser.get("https://example.com")
print(browser.title)
input("Нажмите Enter, чтобы закрыть браузер")
finally:
browser.quit()
try/finally нужен, чтобы браузер закрывался даже при ошибке. А input() дает время посмотреть результат
Частые ошибки
Поставил input(), но скрипт все равно закрывается
Проверьте, дошел ли код до input(). Возможно, ошибка возникает раньше
Добавьте вывод
print("Браузер создан")
browser.get("https://example.com")
print("Страница открыта")
input("Enter")
Запускаю файл двойным кликом
Не делайте так для диагностики. Откройте терминал в папке проекта и запустите командой python main.py
Браузер закрывается после close()
close() закрывает текущую вкладку. Если вкладка единственная, окно браузера тоже исчезнет
Если хотите закрыть весь браузер, используйте quit(). Если хотите закрыть только одну вкладку, сначала убедитесь, что есть другая вкладка, куда можно переключиться
На сайте ничего не успевает загрузиться
Скрипт может идти дальше быстрее, чем страница загружается. Для реальной проверки используйте явные ожидания Selenium, а не только sleep()
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Python как считает вкладки в браузере: window_handles в Selenium
- Python открыть ссылку в новой вкладке: webbrowser и Selenium
- element.get_attribute в Python Selenium: как получить href, class, value и другие атрибуты
- Как закрыть вкладку в Python: Selenium close(), quit() и переключение окон