Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何识别iframe中的元素并将其发送到该元素?_Python_Selenium_Iframe - Fatal编程技术网

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

Python 如何识别iframe中的元素并将其发送到该元素?,python,selenium,iframe,Python,Selenium,Iframe,我试图在一个字段中写入'eureka',Selenium总是触发相同的错误:NoTouchElementException 这是我试图从中获取数据的字段: <input type="text" class="standardTextField" id="rulesFilternameValue" name="rulesFilternameValue" onclick="if(typeof event !== 'undefined' &amp;&amp; event != n

我试图在一个字段中写入'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查找元素”(“主窗口”)失败,因为所需元素位于
中,因此要在元素上调用
单击()
,您必须:

  • 诱导WebDriverWait以使所需帧可用并切换到该帧
  • 诱导WebDriverWait使所需元素可单击
  • 您可以使用以下解决方案:

    • 使用
      CSS\u选择器

      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
      

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


这是否回答了您的问题?不幸的是,不是:browser.switch_to.frame(browser.find_element_by_tag_name(“iframe”)->NoSuchElementException:Message:找不到元素:iframe您必须将selenium驱动程序重定向到正确的帧。你说这是一个iframe,这意味着selenium没有意识到它。因此,在页面上找到驱动程序可用的不同帧并选择iframe。然后做你的
find_element
怀疑:当我切换到.frame(浏览器.find_element按标签名称(“iframe”))时,我也得到了一个NoTouchElementException我错了,你们是对的。对不起,非常感谢您的帮助:-)