Python
Как закрыть вкладку в Python: Selenium close(), quit() и переключение окон
Если вы управляете браузером через Selenium, текущую вкладку закрывает метод `close()`.
Ниже — разделы про close() и quit(): в чем разница, как открыть новую вкладку и как узнать список вкладок, чтобы быстро понять устройство материала, практические ограничения и типовые точки отказа.
Если вы управляете браузером через Selenium, текущую вкладку закрывает метод close()
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
browser.close()
Но есть важная деталь: если это была единственная вкладка, окно браузера тоже закроется. Метод close() закрывает текущую вкладку, а не «одну из многих где-то там»
close() и quit(): в чем разница
close() закрывает текущую вкладку или окно
browser.close()
quit() закрывает весь браузер и завершает WebDriver-сессию
browser.quit()
Для новичка правило такое
- хотите закрыть одну вкладку —
close() - хотите закончить работу скрипта и закрыть браузер полностью —
quit()
В конце автоматизации обычно используют quit(), чтобы не оставлять процессы Chrome
Как открыть новую вкладку
В новых версиях Selenium можно открыть вкладку так
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
browser.switch_to.new_window("tab")
browser.get("https://www.python.org/")
input("Нажмите Enter")
browser.quit()
После new_window("tab") Selenium переключается на новую вкладку, и следующий get() открывает страницу уже там
Как узнать список вкладок
Selenium хранит вкладки и окна как handles — технические идентификаторы
print(browser.window_handles)
print(browser.current_window_handle)
window_handles — список всех вкладок и окон, которые видит Selenium
current_window_handle — текущая вкладка, с которой сейчас работает код
Как закрыть вторую вкладку и вернуться на первую
Пример полностью
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
first_tab = browser.current_window_handle
browser.switch_to.new_window("tab")
browser.get("https://www.python.org/")
second_tab = browser.current_window_handle
browser.close()
browser.switch_to.window(first_tab)
print(browser.title)
input("Нажмите Enter для выхода")
browser.quit()
Что здесь происходит
- открыли первую страницу
- запомнили первую вкладку
- открыли новую вкладку
- запомнили вторую вкладку
- закрыли текущую вкладку через
close() - переключились обратно на первую
- в конце закрыли весь браузер через
quit()
Если после close() не переключиться на живую вкладку, следующая команда Selenium может упасть, потому что текущая вкладка уже закрыта
Как открыть ссылку в новой вкладке
Если на странице есть ссылка, можно открыть новую вкладку через JavaScript
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
browser.execute_script("window.open('https://www.python.org/', '_blank');")
handles = browser.window_handles
browser.switch_to.window(handles[-1])
print(browser.title)
input("Enter")
browser.quit()
handles[-1] берет последнюю открытую вкладку
Для учебной задачи это удобно. В серьезных тестах лучше сохранять handles явно, чтобы не запутаться
Как закрыть вкладку по номеру
Технически можно взять вкладку из списка
handles = browser.window_handles
browser.switch_to.window(handles[1])
browser.close()
browser.switch_to.window(handles[0])
Но номер вкладки — хрупкая вещь. Если порядок изменится, вы закроете не ту вкладку
Лучше сохранять handle сразу после открытия вкладки
new_tab = browser.current_window_handle
Частые ошибки
NoSuchWindowException
Обычно значит, что код пытается работать с уже закрытой вкладкой
Решение: после close() переключитесь на другую вкладку
browser.switch_to.window(browser.window_handles[0])
Закрыл весь браузер вместо вкладки
Скорее всего, вы использовали quit() или закрыли единственную вкладку
Если нужна работа с несколькими вкладками, сначала откройте вторую вкладку и проверьте window_handles
Открыл новую вкладку, но Selenium работает со старой
Открыть вкладку мало. Нужно переключиться на нее
browser.switch_to.window(browser.window_handles[-1])
Мини-практика
Запустите такой код и посмотрите, как меняется количество вкладок
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://example.com")
print("После первой вкладки:", len(browser.window_handles))
browser.switch_to.new_window("tab")
browser.get("https://www.python.org/")
print("После второй вкладки:", len(browser.window_handles))
browser.close()
browser.switch_to.window(browser.window_handles[0])
print("После закрытия:", len(browser.window_handles))
input("Enter")
browser.quit()
Так вы увидите, что window_handles — это не абстракция, а реальный список вкладок, доступных Selenium
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Python как считает вкладки в браузере: window_handles в Selenium
- Python открыть ссылку в новой вкладке: webbrowser и Selenium
- Python сразу закрывает браузер: как исправить в Selenium и обычном запуске
- element.get_attribute в Python Selenium: как получить href, class, value и другие атрибуты