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