如何识别iframe中的元素并将其发送到该元素?

2024-09-28 21:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一个字段中写入'eureka',Selenium总是触发相同的错误:NoTouchElementException

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

<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')}">

我已经尝试过按id查找元素、按类查找元素、按xpath查找元素等等

整个过程都在一个iFrame中:

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

但是,事件“按元素id查找元素”(“主窗口”)失败


Tags: nameeventidtrue元素ifnullamp
1条回答
网友
1楼 · 发布于 2024-09-28 21:03:27

由于所需元素位于<iframe>内,因此要在元素上调用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
      

参考文献

您可以在以下内容中找到一些相关讨论:

相关问题 更多 >