#python #selenium #iframe
Вопрос:
В настоящее время я пытаюсь переключиться с содержимого по умолчанию на единственный iframe на веб-сайте. Я не знаю, так ли закодирован сайт, но я не могу получить доступ через DOM ни к одному элементу.
XPATH сайта //*[@id="iframeBody"]
(когда я вставляю это в инспектор элементов, я получаю правильный iframe). Итак, если я попытаюсь переключиться с помощью frame_to_be_available_and_switch_to_it
, это будет выход:
try:
WebDriverWait(self.driver, 10).until(ec.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='iframeBody' and @name='body']")))
except Exception as e:
print(e)
>>> Message: javascript error: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.
>>>(Session info: chrome=79.0.3945.88)
Я также попытался создать переменную элемента iframe, найдя ее с помощью идентификатора и XPATH, а затем использовал switch_to(элемент). Получаем тот же результат. Когда я печатаю эту переменную, элемент действительно найден:
# Also tried finding with id
element = self.driver.find_element_by_xpath('//iframe[@id='iframeBody')
print(element)
<selenium.webdriver.remote.webelement.WebElement (session="9184691b1fdcccc15dd36bbcb914ac8b", element="1ef77729-8a6e-4d3c-98bd-c95878437585")>
Но когда я пытаюсь переключиться на этот iframe, я получаю тот же результат, что и выше.
По какой-то причине этот сайт не позволяет мне использовать данные DOM, на самом деле, когда я пытаюсь нажать кнопку, мне нужно использовать цепочки действий, потому что я получаю ту же ошибку.
Кто-нибудь может мне помочь?
Комментарии:
1. не похоже, что вы должны получать ошибку javascript при использовании webdriverwait… это немного странно. Включите более полную версию кода. Попробуйте/перехватите вызов и опубликуйте исключение из веб-драйвера, если таковое имеется…
2. Я обновил свой вопрос прямо сейчас с помощью try and catch.
3. не уверен в синтаксисе для python там… но похоже, что он ожидает веб-элемента. (вместо По локатору) frameToBeAvailableAndSwitchToIt имеет перегруженные конструкторы… selenium.dev/селен/документы/api/java/org/openqa/селен/поддержка/…
Ответ №1:
Вы ставили enough time
перед переключением ?
кроме того, вы могли switch
бы также напрямую:
driver.switch_to.default_content()
driver.switch_to.frame(driver.find_element_by_id("iframeBody"))