Как я могу переключиться на iframe с помощью Selenium и python?

Я без проблем использовал Selenium для ряда проектов. Это, однако, не кости.

Я пытаюсь автоматизировать процесс проверки, но иногда появляется запрос на повторный ввод информации. В окне есть всплывающее окно javascript (я думаю), и, хотя я могу без проблем выбрать часть <div id = "app">, я НЕ МОГУ найти iframe и сосредоточиться на ней.

Итак, это работает:

driver.find_elements_by_id('app')

Но, ничего не получается распознать кадр и переключиться на него. Например, ни один из них не работает:

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_xpath()

И я предполагаю это, потому что я не могу найти и переключиться на iframe.

Помощь?

Всем спасибо за быстрые и (я ожидаю) полезные ответы. Я не смогу проверить это до позднего вечера или завтра. Я буду держать вас в курсе.

ctaggart 11.12.2020 16:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
159
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

driver.switch_to.frame(iframe_elem)

или

driver.switch_to_frame(iframe_id)

в вашем случае вы можете использовать:

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"));

чтобы вернуться к основному использованию:

driver.switch_to_default_content()

Попробуйте этот код, чтобы переключиться на кадр

frame = driver.find_element_by_xpath('//div[starts-with(@id, "zoid-ec-payment")]/iframe')
driver.switch_to.frame(frame)
Ответ принят как подходящий

Элемент с текстом «Вход по электронной почте» находится внутри <iframe>, поэтому вам необходимо:

  • Вызовите WebDriverWait, чтобы нужный кадр стал доступен, и переключитесь на него.

  • Вы можете использовать любую из следующих стратегий поиска:

    • Использование CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.zoid-visible[title='ec_payment'][name^='__zoid__ec__payment']")))
      
    • Использование XPATH:

      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='zoid-visible' and @title='ec_payment'][starts-with(@name, '__zoid__ec__payment')]")))
      
  • Примечание. Вы должны добавить следующие импорты:

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

Ссылка

Вы можете найти пару соответствующих обсуждений в:

DebanjanB, спасибо! Это заставило меня пройти через это!

ctaggart 15.12.2020 05:42

Другие вопросы по теме