Selenium with Python:将密钥发送到iframe

时间:2017-06-18 17:40:53

标签: python selenium iframe selenium-webdriver

我在SO上发了几篇文章,并使用了建议的切换到iframe的方法 -

driver.switch_to.frame(driver.find_element_by_id(iFrameID))
element = driver.find_element_by_xpath('HTML/BODY')

但是,我通过xpath得到了NoSuchElementException

我在切换到iframe后添加了print (driver.page_source),并看到了以下结构 -

<HTML dir=ltr><HEAD><LINK rel=stylesheet type=text/css 
href="/_layouts/1033/styles/core.css">
<META name=GENERATOR content="MSHTML 11.00.9600.18639"></HEAD>
<BODY class=ms-formbody contentEditable=true style="BORDER-TOP: medium none; 
BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; BORDER-LEFT: medium 
none; BACKGROUND-COLOR: white" scroll=yes WebLocale="1033"
BaseElementID="baseTextField" wordWrap="false" RestrictedMode="true">
<DIV></DIV></BODY></HTML>

HTML / BODY结构肯定存在,所以我不确定我在find_element_by_xpath中做错了什么。我也尝试过/ HTML / BODY和// HTML / BODY没有运气。

作为一种解决方法,我尝试通过点击iframe然后使用ActionChains将RTE置于焦点

driver.find_element_by_id(iFrameID).click()
actions = ActionChains(driver)
actions.send_keys("Lorem Ipsum")
actions.perform()

但是出现了以下错误:

NameError: name ActionChains is not defined

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

这篇文章有些旧,但是我希望我的解决方案能够帮助遇到类似问题的任何人。

所以我设法使用Selenium Python将密钥发送到iframe的方法是,先切换到iframe,然后再使用iframe的switch_to_frame,我们可以使用driver.find_element像新文档一样查询该文档

下面显示的示例

#Select iFrame
element = driver.find_element_by_id(iFrameID)

#Switch to iFrame
driver.switch_to_frame(element)

#Query document for the ID that you're looking for
queryElement = driver.find_element_by_id(queryID)

#Send key to the ID
queryElement.send_keys("L")

#Switch back to default content from iFrame
driver.switch_to_default_content()