#python #selenium #selenium-webdriver #iframe #frame
#питон #селен #селен-веб-драйвер #фрейм #рамка
Вопрос:
Я не могу переключиться на успешно идентифицированный iFrame(ы). Сценарий идентифицирует iFrame (проверено в отладчике), но переключение на iFrame завершается ошибкой и попадает в ловушку исключений. Несколько раз назад это работало идеально.
Message='WebDriver' object has no attribute 'switch_to_frame'
Что произошло за это время?
Chromedriver был обновлен с версии 95.0.4638.17 до ChromeDriver 96.0.4664.45
Неужели Chromedriver больше не совместим с последней версией Selenium?
... driver.switch_to.default_content() try: # find the frame wait.until(EC.element_to_be_clickable((By.ID, "wysiwygTextarea_ifr"))) frame2 = driver.find_element(By.XPATH, "//iframe[@id='wysiwygTextarea_ifr']"); # switch to frame driver.switch_to.frame(frame2.tag_name); print("--------------iframe found-------------------"); except: print("--------------iframe not found-------------------"); ...
Комментарии:
1. Еще раз, как я помню, Селен также спонсировал обновление.
2. Еще раз я могу добавить здесь. Сегодня я смог выяснить, почему он работал, как предлагал Дебанджанб, и в следующий раз он больше не работал. Поскольку я понизил рейтинг среды разработки с Selenium 4.x до 3.x, все сценарии теперь работают идеально.
3. Или обновите Selenium только с помощью pip install -U selenium и НЕ устанавливайте новый селен сверху, это подразумевает смесь селена. ПРОБЛЕМА РЕШЕНА!!!
Ответ №1:
При переключении на кадр поддерживаемые обозначения:
- Переключитесь на кадр, используя имя кадра:
driver.switch_to.frame('frame_name')
- Переключитесь на кадр, используя индекс кадра:
driver.switch_to.frame(1)
- Переключитесь на кадр с помощью элемента кадра:
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
-
- Переключитесь на родительский кадр:
driver.switch_to.parent_frame()
- Переключитесь на родительский кадр:
- Переключитесь на содержимое по умолчанию:
driver.switch_to.default_content()
Это использование
Чтобы переключить кадр, который вы использовали:
driver.switch_to.frame(frame2.tag_name);
то есть то, TAG_NAME
что не поддерживается. Следовательно, вы видите ошибку:
Message='WebDriver' object has no attribute 'switch_to_frame'
Решение
Вы можете использовать следующую строку кода:
# find the frame wait.until(EC.element_to_be_clickable((By.ID, "wysiwygTextarea_ifr"))) frame2 = driver.find_element(By.XPATH, "//iframe[@id='wysiwygTextarea_ifr']"); # switch to frame by frame element driver.switch_to.frame(frame2);
Комментарии:
1. Что ж, это исправило мою проблему, хотя ранее я также использовал только «фрейм2» (вероятно, опечатка осталась нераскрытой). В любом случае, спасибо тебе, приятель, за твою поддержку в этом вопросе.