Python

Python как считает вкладки в браузере: window_handles в Selenium

Python сам по себе не знает, сколько вкладок открыто в Chrome, Firefox или Яндекс Браузере. Но если вы управляете браузером через Selenium, список вкладок можно получить через window_handles

count = len(browser.window_handles)
print(count)

window_handles — это список идентификаторов вкладок и окон, которыми управляет Selenium

Минимальный пример

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))

input("Нажмите Enter")
browser.quit()

Ожидаемый вывод

Вкладок: 1
Вкладок: 2

Так Python «считает вкладки» не через операционную систему, а через Selenium-сессию

Что такое window_handles

browser.window_handles возвращает список примерно такого вида

['2F78A0...', 'CD91B4...']

Это не названия страниц и не адрес. Это внутренние идентификаторы окон или вкладок браузера

Чтобы посмотреть текущую вкладку, используйте

print(browser.current_window_handle)

Чтобы переключиться на вкладку, используйте

browser.switch_to.window(browser.window_handles[0])

Или на последнюю открытую

browser.switch_to.window(browser.window_handles[-1])

Как вывести адрес всех вкладок

Сами window_handles не содержат адрес. Нужно по очереди переключиться на каждую вкладку и прочитать current_url

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://example.com")

browser.switch_to.new_window("tab")
browser.get("https://www.python.org/")

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    print(browser.current_url)

input("Enter")
browser.quit()

Вывод будет примерно таким

https://example.com/
https://www.python.org/

Как вывести заголовки всех вкладок

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    print(browser.title)

Это полезно, если нужно найти вкладку по заголовку страницы

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    if "Python" in browser.title:
        print("Нашли вкладку Python")
        break

После break Selenium останется на найденной вкладке

Почему Python не видит вкладки, открытые вручную

Если вы открыли Chrome сами, а потом запустили Python-скрипт, Selenium обычно создает отдельное окно браузера. Он видит только свои вкладки, а не все вкладки вашей обычной сессии

Это нормальное поведение. Selenium предназначен для управляемого браузера, а не для слежения за вашим личным Chrome

Подключаться к уже открытому Chrome можно через remote debugging, но это отдельный сценарий. Для новичка лучше сначала понять window_handles в обычной Selenium-сессии

Как посчитать только вкладки, а не окна

В Selenium вкладки и окна часто идут в одном списке. Если вы открываете именно new_window("tab"), визуально это вкладки. Если new_window("window"), это отдельные окна

browser.switch_to.new_window("window")

Но в обоих случаях Selenium добавит новый handle в window_handles

Поэтому len(browser.window_handles) показывает количество управляемых оконных контекстов, а не всегда строго «вкладок» в бытовом смысле

Для большинства учебных задач это различие не мешает

Частые ошибки

Список вкладок не меняется

Возможно, новая вкладка открылась не через Selenium или браузер заблокировал popup

Для теста используйте явную команду

browser.switch_to.new_window("tab")

Selenium печатает handles, но я не понимаю, где адрес

Handles — это технические ID. Для адрес нужно переключаться на вкладку и читать browser.current_url

После закрытия вкладки код падает

После browser.close() текущий handle становится недействительным. Переключитесь на живую вкладку

browser.switch_to.window(browser.window_handles[0])

Мини-задача

Откройте три вкладки и выведите их адреса

from selenium import webdriver

browser = webdriver.Chrome()

browser.get("https://example.com")

browser.switch_to.new_window("tab")
browser.get("https://www.python.org/")

browser.switch_to.new_window("tab")
browser.get("https://docs.python.org/3/")

print("Всего вкладок:", len(browser.window_handles))

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    print(browser.current_url)

input("Enter")
browser.quit()

Если вывелось Всего вкладок: 3, логика работает

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x