如何切换到框架并选择框架中的元素?

如何解决如何切换到框架并选择框架中的元素?

我正在尝试选择框架“mainFrame”。

页面来源:

<frameset rows="89,*" frameborder="NO" border="0" framespacing="0">
    <frame name="topFrame" scrolling="NO" noresize src="inc-webpage/b-topnav.asp">
        <frameset rows="*,20" frameborder="NO" border="0" framespacing="0">
            <frameset cols="175,*" frameborder="NO" border="0" framespacing="0">
                <frame name="leftFrame" scrolling="AUTO" noresize src="inc-webpage/b-sidenav-3.asp">
                <frame name="mainFrame" src="b-default.asp">
            </frameset>
            <frame name="bottomFrame" scrolling="NO" noresize src="inc-webpage/b-footer.asp">
        </frameset>
</frameset>
<noframes>

我希望选择的元素在“mainFrame”中。因此我的代码是:

time.sleep(5)    
driver.switch_to.frame("mainFrame");
driver.find_element_by_xpath("//a[contains(text(),'I Agree')]").click()

是的。 time.sleep() 并不理想,所以我暂时使用它。

这是我希望在“mainFrame”中选择的元素的 HTML:

<input type="button" value="I Agree" 
class="btn" onmouSEOver="blueBtnOver(this)" onmouSEOut="blueBtnOut(this)" 
onclick="javascript:location.href='b-3c-pLessonBooking.asp?limit=pl'" style="background: rgb(0,102,204);">

当前收到此错误

NoSuchFrameException(frame_reference) selenium.common.exceptions.NoSuchFrameException:消息:mainFrame

我是一个绝对的初学者。 driver.find_element_by_xpath 可能是错误

另外,为什么有些网站使用框架//框架集,而有些网站使用 iframe,而有些网站两者都不使用?

解决方法

基本上等待框架切换到它,然后单击具有我同意的匹配值的输入。

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

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it("mainFrame"))
driver.find_element_by_xpath("//input[@value='I Agree']").click()
,

所需元素嵌套在多个 <frame> 元素中,因此您必须:

  • 诱导WebDriverWait 框架可用并切换到它

  • 框架诱导WebDriverWait可用并切换到它

  • 诱导 WebDriverWait 使所需的元素可点击

  • 您可以使用以下任一 Locator Strategies

    • 使用 CSS_SELECTOR

      WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='topFrame']")))
      WebDriverWait(driver,"frame[name='mainFrame']")))
      WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.btn[value='I Agree']"))).click()
      
    • 使用 XPATH

      WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='topFrame']")))
      WebDriverWait(driver,"//frame[@name='mainFrame']")))
      WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//input[@class='btn' and @value='I Agree']"))).click()
      
  • 注意:您必须添加以下导入:

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

参考

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?