我在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
任何帮助将不胜感激
答案 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()