Урок 16. Работа с вкладками и окнами браузера через Selenium

Иногда нужно одновременно открывать несколько страниц или переключаться между разными вкладками. В этом уроке рассмотрим, как управлять окнами браузера и вкладками с помощью Selenium.

Импорт и подготовка

Подключаем необходимые модули и открываем браузер:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://parsertools.ru/")  # Открываем главную страницу
time.sleep(2)  # Пауза для полной загрузки

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

Можно открыть несколько ссылок в новых вкладках через JavaScript:

menu_links = driver.find_elements(By.CSS_SELECTOR, "ul.wp-block-navigation__container li a")

for link in menu_links:
    url = link.get_attribute("href")
    driver.execute_script(f"window.open('{url}', '_blank');")
    time.sleep(3)  # Задержка для открытия вкладки

Переключение между вкладками

Selenium позволяет переключаться между окнами браузера:

tabs = driver.window_handles  # Получаем список всех вкладок
for tab in tabs:
    driver.switch_to.window(tab)
    print("Открыта вкладка:", driver.title)
    time.sleep(2)

Закрытие вкладок

Можно закрывать вкладки после обработки:

# Закрываем все вкладки кроме первой
for tab in tabs[1:]:
    driver.switch_to.window(tab)
    driver.close()
    time.sleep(1)

# Возвращаемся на первую вкладку
driver.switch_to.window(tabs[0])
print("Осталась вкладка:", driver.title)

Пример управления вкладками и окнами в браузере

from selenium import webdriver  # Импорт библиотеки Selenium для управления браузером
from selenium.webdriver.common.by import By  # Модуль для поиска элементов по CSS-селекторам
import time  # Импорт модуля time для добавления пауз между действиями

# Инициализация драйвера Chrome для взаимодействия с браузером
driver = webdriver.Chrome()

try:
    # Открытие главной страницы сайта parsertools.ru
    driver.get("https://parsertools.ru")
    # Разворачивание окна браузера на полный экран для удобства
    driver.maximize_window()
    time.sleep(3)  # Пауза для полной загрузки страницы и её элементов

    # Поиск всех ссылок в меню навигации по CSS-селектору
    menu_links = driver.find_elements(By.CSS_SELECTOR, "ul.wp-block-navigation__container li a")

    # Перебор ссылок и открытие каждой в новой вкладке
    for link in menu_links:
        # Получение атрибута href (URL) для каждой ссылки
        url = link.get_attribute("href")
        # Использование JavaScript для открытия ссылки в новой вкладке
        driver.execute_script(f"window.open('{url}', '_blank');")
        time.sleep(3)  # Пауза между открытием вкладок для стабильности

    # Получение списка всех открытых вкладок (их идентификаторов)
    tabs = driver.window_handles

    # Переключение между всеми вкладками и вывод заголовка каждой
    for tab in tabs:
        # Переключение на конкретную вкладку
        driver.switch_to.window(tab)
        # Вывод заголовка текущей страницы в консоль
        print("Сейчас открыта вкладка:", driver.title)
        time.sleep(3)  # Пауза для просмотра содержимого вкладки

    # Закрытие всех вкладок, кроме первой
    for tab in tabs[1:]:
        # Переключение на вкладку, которую нужно закрыть
        driver.switch_to.window(tab)
        # Закрытие текущей вкладки
        driver.close()
        time.sleep(1)  # Пауза для стабильности

    # Возврат к первой (главной) вкладке
    driver.switch_to.window(tabs[0])
    # Вывод сообщения о возврате к главной вкладке
    print("Возврат к главной вкладке:", driver.title)
    time.sleep(10)  # Пауза для просмотра результата

finally:
    # Закрытие браузера и освобождение ресурсов
    driver.quit()

Советы по работе с вкладками

  • Используйте window_handles для отслеживания всех открытых окон и вкладок.
  • Переключение switch_to.window() позволяет работать с конкретной вкладкой.
  • Перед закрытием вкладки убедитесь, что все нужные действия выполнены.
  • Задержки time.sleep() помогают убедиться, что страницы полностью загружены.

Освоение работы с вкладками и окнами позволяет автоматизировать параллельную обработку нескольких страниц, собирать данные с разных разделов сайта и управлять большим количеством открытых ресурсов.

Больше уроков по парсингу на parsertools.ru/lessons.