Урок 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.
