【问题标题】:How to identify and send text to an element within an iframe?如何识别文本并将其发送到 iframe 中的元素?
【发布时间】:2020-02-25 13:08:04
【问题描述】:

我正在尝试在字段中写入“eureka”,而 Selenium 总是触发相同的错误:NoSuchElementException

这是我试图从中获取数据的字段:

<input type="text" class="standardTextField" id="rulesFilternameValue" name="rulesFilternameValue" onclick="if(typeof event !== 'undefined' &amp;&amp; event != null) {event.cancelBubble=true;}if(typeof event !== 'undefined' &amp;&amp; event != null) {event.cancelBubble=true;}" onkeypress="if (event.keyCode === 13){event.preventDefault();handleFilterRequest('rulelist', 'FILTER')}">

我已经尝试过使用 find_element_by_id、find_element_by_class、find_element_by_xpath 什么都没有。

整个事情都在 iFrame 中:

<iframe id="mainwindow" name="mainwindow" style="top: 54px; height: 849px;" 
src="/h2/welcomeAction.do?misc=1582634309181" frameborder="0"></iframe>

但事件 find_element_by_id('mainwindow') 失败

【问题讨论】:

  • 这能回答你的问题吗? Select iframe using Python + Selenium
  • 不幸的是:browser.switch_to.frame(browser.find_element_by_tag_name("iframe")) -> NoSuchElementException:消息:无法定位元素:iframe
  • 您必须将您的 selenium 驱动程序重定向到正确的框架。你说它是一个 iframe,这意味着 selenium 不知道它。因此,在页面上找到驱动程序可用的不同框架并选择 iframe。然后做你的find_element
  • 疑问:当我做 switch_to.frame(browser.find_element_by_tag_name("iframe")) 我也得到一个 NoSuchElementException
  • 我错了,你们是对的人。很抱歉,非常感谢您的帮助:-)

标签: python selenium iframe


【解决方案1】:

由于所需元素位于 &lt;iframe&gt; 内,因此要在元素上调用 click(),您必须:

  • 诱导 WebDriverWait 使所需的框架可用并切换到它
  • 诱导 WebDriverWait 使所需的元素可点击
  • 您可以使用以下解决方案:

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#mainwindow[name='mainwindow']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.standardTextField#rulesFilternameValue"))).send_keys("eureka")
      
    • 使用XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='mainwindow' and @name='mainwindow']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='standardTextField' and @id='rulesFilternameValue']"))).send_keys("eureka")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

参考

您可以在以下位置找到一些相关讨论:

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多