Как гарантированно открыть и контролировать новую вкладку в Chrome с помощью Selenium WebDriver и Python: Пошаговая инструкция?

Selenium WebDriver – мощный инструмент для автоматизации браузеров, широко используемый для тестирования веб-приложений, сбора данных и других задач. Одной из распространенных задач является открытие и управление новыми вкладками в браузере. В этой статье мы подробно рассмотрим, как гарантированно открыть новую вкладку в Chrome с использованием Selenium WebDriver и Python, а также как управлять этими вкладками. Мы рассмотрим несколько методов, от базовых до продвинутых, и предоставим примеры кода для каждого из них. Эта статья будет полезна как начинающим, так и опытным разработчикам, желающим освоить управление вкладками в Selenium.

Основы работы с окнами и вкладками в Selenium WebDriver

Обзор концепции окон и вкладок в Selenium

В Selenium WebDriver, окно и вкладка (tab) рассматриваются как отдельные контексты браузера. При запуске браузера, Selenium создает главное окно. Новые вкладки открываются внутри этого окна. Каждое окно/вкладка имеет уникальный идентификатор, называемый window_handle, который используется для переключения между ними. Понимание этой концепции – ключ к эффективному управлению вкладками.

Получение списка всех открытых окон/вкладок (window_handles)

window_handles – это свойство драйвера Selenium, которое возвращает список всех открытых окон и вкладок в текущей сессии браузера. Этот список позволяет получить доступ к каждому окну/вкладке и управлять им. Пример кода:

from selenium import webdriver

driver = webdriver.Chrome()  # или любой другой браузер
driver.get("https://www.google.com")

# Открываем новую вкладку (методы описаны ниже)
# ...

window_handles = driver.window_handles
print(window_handles)
# Пример вывода: ['CDwindow-44238F4F1F84B76658A6D1C93541F373', 'CDwindow-44238F4F1F84B76658A6D1C93541F374']

Методы открытия новой вкладки в Selenium Python

Существует несколько способов открыть новую вкладку в Selenium WebDriver с использованием Python. Рассмотрим два основных метода:

Открытие новой вкладки с помощью JavaScript (execute_script)

Этот метод использует JavaScript для открытия новой вкладки. Он является наиболее универсальным и рекомендуется для большинства случаев. Преимущество этого метода в том, что он не требует отправки клавиш и работает надежно в различных браузерах и операционных системах.

driver.execute_script("window.open('');")

Эта строка кода открывает новую вкладку в браузере.

Открытие новой вкладки с помощью комбинации клавиш (send_keys)

Этот метод эмулирует нажатие клавиш Ctrl+t (Windows/Linux) или Command+t (Mac) для открытия новой вкладки. Он может быть полезен, если необходимо имитировать действия пользователя.

from selenium.webdriver.common.keys import Keys

driver.find_element("tag name", 'body').send_keys(Keys.CONTROL + 't') #Для Windows/Linux
#driver.find_element("tag name", 'body').send_keys(Keys.COMMAND + 't') #Для MacOS

Важно: Этот метод может быть менее надежным, чем использование JavaScript, так как зависит от операционной системы и настроек браузера.

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

Переключение между вкладками (switch_to.window)

После открытия новой вкладки необходимо переключиться на нее, чтобы выполнять на ней какие-либо действия. Для этого используется метод switch_to.window(), которому передается window_handle вкладки, на которую нужно переключиться.

Реклама
window_handles = driver.window_handles
driver.switch_to.window(window_handles[-1]) # Переключаемся на последнюю открытую вкладку

#Теперь можно выполнять действия на новой вкладке
driver.get("https://www.example.com")

Закрытие и возврат к исходной вкладке

После завершения работы на новой вкладке, ее можно закрыть с помощью метода driver.close(). После закрытия вкладки, необходимо переключиться обратно на исходную вкладку.

driver.close() # Закрываем текущую вкладку
driver.switch_to.window(window_handles[0]) # Переключаемся на первую вкладку

Практические примеры и сценарии использования

Автоматизация действий на новой вкладке

Рассмотрим пример автоматизации действий на новой вкладке: открытие новой вкладки, переход на определенный URL, выполнение поиска и получение результатов.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.google.com")

# Открываем новую вкладку
driver.execute_script("window.open('');")
window_handles = driver.window_handles
driver.switch_to.window(window_handles[-1])

# Переходим на сайт и выполняем поиск
driver.get("https://www.youtube.com")
search_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "search_query")))
search_box.send_keys("Selenium Python")
search_box.send_keys(Keys.RETURN)

# Получаем результаты поиска
results = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "contents")))
print(len(results))

# Закрываем вкладку и возвращаемся на первую
driver.close()
driver.switch_to.window(window_handles[0])

driver.quit()

Обработка множества вкладок в реальных задачах

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

Рассмотрим пример открытия нескольких вкладок и сбора данных с каждой из них:

from selenium import webdriver
import time

urls = ["https://www.google.com", "https://www.youtube.com", "https://www.example.com"]
driver = webdriver.Chrome()

window_handles = []

for url in urls:
    driver.execute_script("window.open('');")
    window_handles = driver.window_handles
    driver.switch_to.window(window_handles[-1])
    driver.get(url)
    print(f"Title of {url}: {driver.title}")
    time.sleep(2)


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


driver.switch_to.window(window_handles[0])

driver.quit()

В этом примере мы открываем несколько вкладок, переходим на заданные URL, получаем заголовок каждой страницы и закрываем все вкладки, оставив только первую открытой.

Заключение

В этой статье мы рассмотрели различные способы открытия и управления новыми вкладками в Chrome с использованием Selenium WebDriver и Python. Мы изучили, как использовать JavaScript и комбинации клавиш для открытия вкладок, как переключаться между вкладками и как закрывать их. Также мы рассмотрели практические примеры автоматизации действий на новых вкладках и обработки множества вкладок в реальных задачах. Надеюсь, эта статья поможет вам эффективно автоматизировать задачи, связанные с управлением вкладками в браузере.


Добавить комментарий