html中的Selenium和iframe

时间:2013-09-20 19:09:25

标签: python iframe selenium selenium-webdriver

无法对iframe使用send_key()。如何选择这个iframe以及其中的哪个元素应该用于send_key()?

page image

和iframe html代码

<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>

如何将值发送到说明?

我还想知道,当我在浏览器中查看“查看页面源代码”时,这段代码不会出现吗?

3 个答案:

答案 0 :(得分:48)

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))假设驱动程序是一个健康的webdriver实例。要继续使用默认内容,请执行driver.switch_to.default_content()

编辑:当您切换到所需的框架时,请像往常一样找到您的元素。我想(但不确定)在你的情况下这将是一个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)

答案 1 :(得分:1)

要在网页上处理iframe,您需要先使用以下命令切换到页面上显示的iframe: driver.switch_to.frame(frame_id)

本教程有一个handling iframe using selenium with python的工作示例,可让您解决此问题。

答案 2 :(得分:1)

已接受的答案对于给定的问题非常有效。但是,我有两个理由添加一个答案,并希望这个答案可以帮助某人以不同的提问方式提出该问题。

原因1:

接受的答案是一种处理网页内iframe的方法。但是,处理iframe的方法有很多。

  • 通过使用框架的索引位置
  • 通过使用框架名称
  • 通过使用框架ID

原因2:

它使用 driver.find_element_by_tag_name(“ iframe”)语句查找可能不起作用的iframe元素,或者在同一页面中有多个iframe元素时返回预期的iframe Web元素。

那里有很多文章详细介绍了如何处理iframe。

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