Что такое iframe и как с ним работать в Selenium?

🔹 Что такое iframe?

<iframe> (inline frame) — это HTML-элемент, который встраивает одну веб-страницу внутрь другой. Пример:

<html>
  <body>
    <h1>Главная страница</h1>
    <iframe src="https://example.com" id="frame1"></iframe>
  </body>
</html>

👉 Всё, что внутри <iframe> ... </iframe>, не является частью основного DOM, а отдельным документом. Поэтому Selenium не может напрямую работать с элементами внутри iframe, пока мы в него не переключимся.


🔹 Работа с iframe в Selenium

Чтобы взаимодействовать с элементами внутри iframe, нужно явно переключить контекст.

✅ Переключение в iframe:

from selenium import webdriver

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

# По индексу (0 = первый iframe на странице)
driver.switch_to.frame(0)

# По имени или id
driver.switch_to.frame("frame1")

# По веб-элементу
iframe = driver.find_element("id", "frame1")
driver.switch_to.frame(iframe)

✅ Возврат в основной документ:

driver.switch_to.default_content()

✅ Переключение на родительский iframe:

driver.switch_to.parent_frame()

🔹 Пример: работа с формой внутри iframe

# Переходим в iframe
driver.switch_to.frame("frame1")

# Находим поле ввода внутри iframe
input_box = driver.find_element("name", "username")
input_box.send_keys("test_user")

# Возвращаемся в основной DOM
driver.switch_to.default_content()

⚠️ Важные моменты:

  • Если не переключиться в iframe, Selenium выдаст ошибку NoSuchElementException.

  • Иногда iframe динамически подгружается → нужно использовать Explicit Wait.

  • Если iframe вложенные, нужно переходить последовательно: frame1 → frame2 → ....

Last updated

Was this helpful?