Урок 17. Обработка JavaScript-окон: Alert, Confirm, Prompt
На многих сайтах встречаются всплывающие диалоговые окна: простые уведомления (Alert), окна с подтверждением (Confirm) и окна для ввода текста (Prompt). В этом уроке рассмотрим, как работать с такими окнами в Selenium.
Импорт и подготовка
Подключаем необходимые модули и открываем браузер:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Chrome()
driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert") # Пример страницы с alert
driver.maximize_window()
time.sleep(2)
Работа с Alert
Alert — это простое всплывающее окно с кнопкой «OK»:
# Переключаемся на iframe, где находится пример
driver.switch_to.frame("iframeResult")
# Нажимаем кнопку, чтобы вызвать alert
driver.find_element(By.TAG_NAME, "button").click()
time.sleep(1)
# Переключаемся на alert
alert = driver.switch_to.alert
# Получаем текст окна
print("Alert текст:", alert.text)
# Подтверждаем (OK)
alert.accept()
time.sleep(2)
Работа с Confirm
Confirm — окно с кнопками «OK» и «Отмена»:
# Пример на другой странице или другом примере
# confirm = driver.switch_to.alert
# confirm.dismiss() # Нажать "Отмена"
# confirm.accept() # Нажать "OK"
Работа с Prompt
Prompt — окно для ввода текста:
# prompt = driver.switch_to.alert
# prompt.send_keys("Привет, Selenium!") # Ввод текста
# prompt.accept() # Подтверждение
Ниже приведён полный код с подробными комментариями, который реализует автоматизацию работы с диалоговыми окнами Alert, Confirm и Prompt на примере сайта w3schools.com.
from selenium import webdriver # Импорт библиотеки Selenium для управления браузером
from selenium.webdriver.common.by import By # Модуль для поиска элементов по различным критериям
from selenium.webdriver.support.ui import WebDriverWait # Модуль для явного ожидания загрузки элементов
import time # Импорт модуля time для добавления пауз
# Инициализация драйвера Chrome для взаимодействия с браузером
driver = webdriver.Chrome()
try:
# -----------------------
# 1. Работа с Alert
# -----------------------
# Загрузка страницы с примером Alert
driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert")
# Разворачивание окна браузера на полный экран
driver.maximize_window()
time.sleep(2) # Пауза для полной загрузки страницы
# Переключение на фрейм с контентом (страница содержит iframe)
driver.switch_to.frame("iframeResult")
# Поиск и клик по кнопке, вызывающей Alert
driver.find_element(By.TAG_NAME, "button").click()
time.sleep(1) # Пауза для появления Alert
try:
# Ожидание появления Alert (до 5 секунд)
alert = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
# Вывод текста Alert в консоль
print("Alert текст:", alert.text)
time.sleep(2) # Пауза для демонстрации
# Принятие Alert (нажатие OK)
alert.accept()
time.sleep(2) # Пауза после действия
except:
print("Alert не найден или уже закрыт")
# Возврат в основной контент страницы
driver.switch_to.default_content()
time.sleep(2)
# -----------------------
# 2. Работа с Confirm
# -----------------------
# Загрузка страницы с примером Confirm
driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_confirm")
time.sleep(2) # Пауза для загрузки
driver.switch_to.frame("iframeResult")
# Поиск и клик по кнопке, вызывающей Confirm
driver.find_element(By.TAG_NAME, "button").click()
time.sleep(1)
try:
# Ожидание появления Confirm
confirm = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
# Вывод текста Confirm в консоль
print("Confirm текст:", confirm.text)
time.sleep(2)
# Отклонение Confirm (нажатие Cancel)
confirm.dismiss()
time.sleep(2)
except:
print("Confirm не найден или уже закрыт")
driver.switch_to.default_content()
time.sleep(2)
# -----------------------
# 3. Работа с Prompt
# -----------------------
# Загрузка страницы с примером Prompt
driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_prompt")
time.sleep(2)
driver.switch_to.frame("iframeResult")
# Поиск и клик по кнопке, вызывающей Prompt
driver.find_element(By.TAG_NAME, "button").click()
time.sleep(1)
try:
# Ожидание появления Prompt
prompt = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
# Вывод текста Prompt в консоль
print("Prompt текст:", prompt.text)
time.sleep(2)
# Ввод текста в поле Prompt
prompt.send_keys("Обучайтесь парсингу на https://parsertools.ru/")
time.sleep(1)
# Принятие Prompt (нажатие OK)
prompt.accept()
time.sleep(2)
except:
print("Prompt не найден или уже закрыт")
driver.switch_to.default_content()
time.sleep(2)
# Переход на сайт parsertools.ru
driver.get("https://parsertools.ru/")
time.sleep(15) # Пауза для просмотра результата
finally:
# Закрытие браузера и освобождение ресурсов
driver.quit()
print("Скрипт завершён")
Советы
- Всегда используйте
switch_to.alert, иначе Selenium не сможет взаимодействовать с окном. - Методы
accept()иdismiss()позволяют подтверждать или отклонять окно. - Для prompt можно использовать
send_keys()перед подтверждением. - Не забывайте паузы или явные ожидания, чтобы окно успело появиться.
Освоение работы с Alert, Confirm и Prompt важно для автоматизации тестирования сайтов и взаимодействия с динамическим контентом.
Больше уроков по парсингу на parsertools.ru/lessons.
