Я без проблем использовал 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.
Помощь?
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, спасибо! Это заставило меня пройти через это!
Всем спасибо за быстрые и (я ожидаю) полезные ответы. Я не смогу проверить это до позднего вечера или завтра. Я буду держать вас в курсе.