Селен и 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.

  1. http://allselenium.info/handling-iframes-using-selenium-webdriver/