Селен и iframe в html
Невозможно использовать send_key() для iframe. Как выбрать этот iframe и какой элемент внутри него следует использовать для send_key()?
![page image]()
и iframe html code
<iframe class="textarea" src="/framework/html/blank.html" style="width: 99%; border-width: 1px; height: 332px;">
#document
<html webdriver="true">
<head>
</head>
<body> … </body>
</html>
</iframe>
Как отправить значение в описание?
Еще одна вещь, которую я хочу знать о том, что этот код фрейма не наступает, когда я перехожу на "источник страницы просмотра" в браузере?
Ответы
Ответ 1
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
Предполагая, что драйвер - это здоровый экземпляр webdriver. Чтобы продолжить содержимое по умолчанию, выполните driver.switch_to.default_content()
EDIT. Когда вы переключитесь на нужный кадр, найдите свой веб-элемент, как всегда. Я думаю (но не уверен) в вашем случае это будет html/body, поэтому
el = driver.find_element_by_xpath('html/body')
должно быть хорошо. И выполните
el.send_keys('keys_to_send')
EDIT2: перед отправкой ключей вам может потребоваться сфокусироваться на элементе (щелчок должен сделать вещь, должен появиться дочерний элемент). Или вы можете просто поместить необходимый текст через JS.
driver.execute_script('document.body.innerHTML = "%s"' % text_var)
Ответ 2
Чтобы обрабатывать iframe на веб-странице, вам нужно сначала переключиться на iframes, которые присутствуют на странице, используя эту команду:
driver.switch_to.frame(frame_id)
В этом учебнике приведен рабочий пример обработка iframe с использованием селена с помощью python, который позволит вам решить эту проблему.
Ответ 3
Принятый ответ очень хорошо работает на данный вопрос. Однако у меня есть две причины для добавления еще одного ответа и надеюсь, что этот ответ может помочь кому-то задать этот вопрос другим вопросом.
Причина 1:
Принятый ответ имеет один способ обработки фреймов внутри веб-страницы. Однако существуют разные способы обработки фреймов.
Используя индексную позицию кадра Используя имя кадра Используя идентификатор кадра
Причина 2:
Он использует оператор driver.find_element_by_tag_name ("iframe") для поиска элемента iframe, который может не работать, или возврата ожидаемого веб-элемента iframe, если на одной странице имеется несколько элементов iframe.
Существует множество статей, в которых подробно объясняется работа с iframe.
- http://allselenium.info/handling-iframes-using-selenium-webdriver/