Python 如何识别iframe中的元素并将其发送到该元素?
我试图在一个字段中写入'eureka',Selenium总是触发相同的错误:NoTouchElementException 这是我试图从中获取数据的字段: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' && event != n
<input type="text" class="standardTextField" id="rulesFilternameValue" name="rulesFilternameValue" onclick="if(typeof event !== 'undefined' && event != null) {event.cancelBubble=true;}if(typeof event !== 'undefined' && 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
- 使用
参考文献 您可以在以下内容中找到一些相关讨论:
find_element
怀疑:当我切换到.frame(浏览器.find_element按标签名称(“iframe”))时,我也得到了一个NoTouchElementException我错了,你们是对的。对不起,非常感谢您的帮助:-)