selenium frame切换

这篇具有很好参考价值的文章主要介绍了selenium frame切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:本篇博客基于selenium 4.1.0

场景说明

场景:页面存在frame、iframe嵌套结构。frame是html中的一种标签,可在一个页面中拼接多个网页
问题:selenium不能直接定位和操作处于frame、iframe内的元素
解决:使用selenium的frame切换功能,切换到frame内后再进行操作
selenium切换iframe,selenium,python,chrome


切换步骤

# 步骤1:根据frame定位,创建frame对象
ele_frame = driver.find_element(By.XPATH, '/html/body/iframe')

# 步骤2:传入frame对象,切换到对应frame中
# 备注:
#   1.可直接传入frame的id、name信息
#   2.可直接传入frame的frame编号,dom结构中的第一个frame编号为0
#   3.存在frame嵌套,即frame中的frame,需要一层层的进入
driver.switch_to.frame(ele_frame)

# 步骤3:退出当前frame
driver.switch_to.default_content()      # 切换到默认frame
driver.switch_to.parent_frame()         # 切换到父级frame

示例

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://sahitest.com/demo/iframesTest.htm')
locator_link = (By.CSS_SELECTOR, '[href="linkTest.htm"]')


print(len(driver.find_elements(*locator_link)))       # 未切换frame,元素列表长度为0,说明selenium查询元素失败

# 切换到frame内
ele_frame = driver.find_element(By.XPATH, '/html/body/iframe')
driver.switch_to.frame(ele_frame)

print(len(driver.find_elements(*locator_link)))       # 切换frame后,元素列表长度为1,说明selenium查询元素成功
driver.find_element(*locator_link).click()            # 元素可正常点击

# 返回主页面
driver.switch_to.parent_frame()
driver.find_element(By.CSS_SELECTOR, '[value="Click me"]').click()  # 主页面元素可正常点击


time.sleep(3)
driver.quit()

driver.switch_to.frame()源码

def frame(self, frame_reference) -> None:
    """
    Switches focus to the specified frame, by index, name, or webelement.

    Args:
        - frame_reference: The name of the window to switch to, an integer representing the index,
        or a webelement that is an (i)frame to switch to.
    Usage:
        driver.switch_to.frame('frame_name')
        driver.switch_to.frame(1)
        driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])
    """
    
    # 传入参数为str,selenium会尝试进行定位获取frame元素对象
    if isinstance(frame_reference, str):
        try:
            frame_reference = self._driver.find_element(By.ID, frame_reference)
        except NoSuchElementException:
            try:
                frame_reference = self._driver.find_element(By.NAME, frame_reference)
            except NoSuchElementException:
                raise NoSuchFrameException(frame_reference)
    
    # 切换到frame
    self._driver.execute(Command.SWITCH_TO_FRAME, {'id': frame_reference})

更多技术文章文章来源地址https://www.toymoban.com/news/detail-693925.html

到了这里,关于selenium frame切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium切换frame

    Frameset:可以直接按照正常元素定位 Frame:需要把驱动切换到Frame内再进行操作 IFrame:需要把驱动切换到Frame内再进行操作 frame切换原理总结: 针对同一层级的frame,如果要进行切换的话,需要切回到默认的首页,不能同级子页之间切换 针对所要进入的frame,有多少个层级,就

    2024年02月11日
    浏览(28)
  • selenium多窗口、多iframe切换、alert切换

    场景: 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。这种情况下,需要识别多标签或窗口的情况。 操作方法: switch_to.window()方法:切换窗口。可以实现在不同的窗口之间切换。current_window_handle:获得当前窗口句柄。

    2024年02月07日
    浏览(33)
  • selenium中,切换iframe的方法

    最近在学基于python+selenium的web自动化,在此记录下学习的东西,也希望可以跟学习这技能的小伙伴们分享、交流。 iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。在selenium进行定位时,如果需要定位某个iframe内的元

    2024年02月16日
    浏览(28)
  • Selenium 点击、输入、截图、读数、切换页(Chrome109.0.5414.75;python 3.7.9)

    selenium入门超详细教程——网页自动化操作 入门指南 | Selenium python命令行运行找不到自定义模块 excel:读取账号密码(pandas)、记录读数(openpyxl) word:操作word(pipywin32) 网页操作:seleinium 截图裁剪:PIL 窗口获取:【待完成】 windows 批处理文件bat中当前目录。 BAT脚本中

    2024年03月25日
    浏览(33)
  • selenium-java中切换iframe

    1、当iframe中有固定的name或者id时可以通过name和id进行切换,代码如下 2、当iframe中没有固定的name或者id时可以通过iframe角标进行切换,在浏览器通过ctrl+f快捷键,搜索标签框输入//iframe;来查看当前iframe是第几个来定位,代码如下 注意:通过下标来定位时需要是同级别的,如果

    2024年01月18日
    浏览(26)
  • Selenium教程__使用switch_to.frame处理网页框架切换(13)

    与在新窗口打开一个网页后需要切换窗口才能定位元素一样,在iframe标签中的元素也不能直接定位,需要切换到对应的iframe框架中才能进行元素定位。 完成网页框架切换操作需要用selenium中的两个方法 driver.switch_to.frame(frame_reference):切换到网页框架内,frame_reference为框架元素

    2024年02月06日
    浏览(34)
  • python-selenium-框架定位的处理frame

    Frame框架是Html框架结构中一种布局格式,共有三种形式:frameset、frame、iframe frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架 页面比较复杂,页面套页面,定位第几层窗口,找元素时,要先看元素在哪个框架,找到框架在定位元素。 框架也是某一个具

    2024年02月11日
    浏览(27)
  • Python3.6+selenium实现操作Frame中的页面元素

    有时网页中会嵌套一个或者多个Frame,此时我们直接去找嵌套在Frame里面的元素会抛出异常,所以在操作的时候我们需要将页面焦点切换到Frame里面,下面我们就以一个实例演示一下! 首先先创建三个html文件,文件代码如下: 1)frameset.html 2)frame_left.html   3)frame_right.html

    2024年01月19日
    浏览(35)
  • Python学习笔记——selenium定位iframe和元素(快速定位)

    在使用selenium过程,发现定位iframe、元素比较困难,所以制作一个辅助小工具。  当前界面没有,调整driver位置 1.Xpath定位  2,.其他定位方式 获取元素、操作失败重复操作,直至操作成功。

    2024年02月13日
    浏览(34)
  • iframe跨域问题:Uncaught DOMException: Blocked a frame with origin解决方法

    在前后端分离的情况下,前台页面将后台页面加载在预留的iframe中;但是遇到了iframe和主窗口双滚动条的情况,由此引申出来了问题: 只保留单个滚动条,那么就要让iframe的高度自适应,而从主页面显然直接取不到iframe的值,因为这是跨域的(前台页面与后台页面不在同一个

    2024年02月11日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包