• Selenium处理frame


    Frame:

    使用Frame,你可以在同一个浏览器窗口中显示不止一个页面。每份HTML文档称为一个框架,并且每个框架都独立于其他的框架。

    为什么要处理Frame:

    当你用selenium定位一个元素时,你发现你怎么都定位不到它,明明F12后也能看见找到这个元素,但是就是定位不到,这时候大概率就是遇见Frame问题了。
    因为你现在正处于主frame中,你是无法定位到子frame的元素的,只有进入子frame之后,你才能正常定位子页面的元素。

    处理Frame:

    selenium提供了switch_to.frame(parameter)方法来切换frame
    parameter是需要传入的参数,用于定位frame,可以是id,name,index,也可以是selenium获得WebElement对象,下面是代码演示:

    driver.switch_to.frame('id')
    driver.switch_to.frame('name')
    driver.switch_to.frame('0')# 0 表示第一个frame
    #也可以用WebElement对象来定位,获取WebElement对象可以通过xpath、css-selector等
    driver.switch_to.frame(driver.find_element_by_xpath('X'))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:当frame嵌套时,你必须先进入你想要进入的frame的父frame,你才能跳转到内层的frame,比如:

    #先找到到ifrome1(id = f1)
    browser.switch_to.frame("f1")
    #再找到其下面的ifrome2(id =f2)
    browser.switch_to.frame("f2")
    
    • 1
    • 2
    • 3
    • 4

    当你向要跳出时,selenium提供了两个方法供你跳出frame:
    1.跳到主frame,也就是默认的页面

    switch_to.default_content()

    2.跳到其父frame

    switch_to.parent_frame()

    具体案例:对qq邮箱登录页面进行操控

    qq邮箱的登录页面的账号密码输入框再一个子frame中,我们必须要进入这个子frame中我们才能对其元素进行操控。
    我们可以发现这个frame没有id和name,那么只能通过后面两种方式进行定位了
    在这里插入图片描述
    具体代码:

    import time
    from selenium import webdriver
    url = 'https://wx.mail.qq.com/login/loginpage?auth_type=3&delegate_url='
    driver = webdriver.Chrome()
    driver.get(url)
    #转到qq登录
    driver.find_element_by_xpath('/html/body/div/div[2]/div/div[1]/div/div[1]/div[2]').click()
    #通过index定位frame
    # driver.switch_to.frame(1)
    #通过WebElement定位frame
    driver.switch_to.frame(driver.find_element_by_class_name("login_loginBox_qq_iframe"))
    driver.find_element_by_id('u').send_keys('1234567')
    time.sleep(5)
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    优秀的项目经理需要具备哪些能力?很关键
    【大数据处理技术】第三篇 大数据处理与分析(持续更新)
    OpenCV4之特征提取与对象检测
    滑动窗口最大值
    前端如何开始深度学习,那不妨试试JAX
    Vue中的计算属性、方法和侦听属性的区别入门版
    基于 Delphi 的前后端分离:之一
    开启更高效之路,美创科技暗数据发现和数据分类分级系统全新升级
    php警车管理系统设计与实现
    地铁车辆基础制动装置设计
  • 原文地址:https://blog.csdn.net/weixin_54575205/article/details/126908995