• pythonselenium iframe、滚动条、窗口切换定位方法详解


    一、frame框架里面的元素定位

      1.1 iframe定位 -- 先切换到iframe框架-定位-释放iframe

     

    定位到iframe 3种的方法

    """
    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])   #通过WebElement对象来定位,如:webelement = driver.find_element_by_xpath(locator)


    """ 

     1 #切换到iframe
     2 driver.switch_to.frame("login_frame_qq")
     3 
     4 #点击账号密码登录
     5 driver.find_element_by_xpath('//a[@id="switcher_plogin"]').click()
     6 time.sleep(2)
     7 #输入账号密码
     8 
     9 #释放iframe 回到主页面
    10 driver.switch_to.default_content()

     注意:如果以上3种方法都没有办法定位到,即:iframe没有id,name等属性

    如图,可以用EC.frame_to_be_available_and_switch_to_it

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Chrome()
    driver.get("https://ke.qq.com/")
    driver.maximize_window()
    time.sleep(3)
    #点击登录按钮
    driver.find_element_by_id("js_login").click()
    
    #2)显性等待--切入iframe
    WebDriverWait(driver,40).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//div[@class="login-qq-iframe-wrap"]//iframe')))
    
    #点击“账号密码登录”
    driver.find_element_by_xpath('//div[@id="login"]//a[@id="switcher_plogin"]').click()
    time.sleep(5)
    
    #输入用户名密码
    driver.find_element_by_xpath('//input[@id="u"]').send_keys("59990568")
    driver.find_element_by_xpath('//input[@id="p"]').send_keys("111111")
    driver.find_element_by_xpath('//input[@value="登 录"]').click()
    time.sleep(3)
    #回到主页面
    driver.switch_to.default_content()
    time.sleep(2)
    
    driver.find_element_by_xpath('//a[@title="关闭"]//i[@class="icon-font i-close"]').click()
    time.sleep(2)
    
    driver.find_element_by_xpath('//a[@title="极速下载"]').click()
    time.sleep(5)
    driver.quit()

    二、页面滚动条之后的元素定位及窗口切换

      2.1 元素拖动到可见区域-定位

      四个常见方法:  

       1)移动到元素element对象的“底端”与当前窗口的“底部”对齐:
           driver.execute_script("arguments[0].scrollIntoView(false);",webelement)

      2)移动到元素element对象的“顶端”与当前窗口的“顶部”对齐  :
           driver.execute_script("arguments[0].scrollIntoView();",webelement)

      3)移动到页面底部:
            driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

      4)移动到页面顶部:
           driver.execute_script("window.scrollTo(document.body.scrollHeight,
         0)") 
    ---------------------------------------------------------------------------------------------------------
      2.2 聚焦--用于输入框光标定位
    #聚焦
    driver.execute_script("arguments[0].focus();",ele_textarea)

    如:
     1 from selenium import webdriver
     2 import time
     3 from selenium.webdriver.support.wait import WebDriverWait
     4 from selenium.webdriver.support import expected_conditions as EC
     5 from selenium.webdriver.common.by import By
     6 
     7 driver = webdriver.Chrome()
     8 driver.get("https://www.baidu.com/")
     9 driver.maximize_window()
    10 time.sleep(3)
    11 
    12 #定位百度搜索框
    13 driver.find_element_by_id("kw").send_keys("python")
    14 time.sleep(3)
    15 driver.find_element_by_id("su").click()
    16 time.sleep(5)
    17 #找到这个元素
    18 ele = driver.find_element_by_xpath('//a[text()="_百度百科"]')
    19 #拖动元素到可见区域--scrollIntoView() 拉到顶部显示,有可能会被导航栏遮挡,定位不到而报错;scrollIntoView(false)可视区域底部对齐
    20 driver.execute_script("arguments[0].scrollIntoView(false);",ele)
    21 time.sleep(5)


      2.2 窗口切换   
      1)handlers = driver.window_handles #获取当前所有的窗口,是个列表
      2)driver.switch_to.window(handlers[-1]) #切换到最新打开的一个窗口
      3)driver.switch_to.window(handlers[0]) #切换到第一个窗口
      4)driver.current_window_handle() #获取当前窗口句柄(点击新开页面,非新开页面句柄,是点击前的页面句柄)

     1 #窗口切换
     2 #获取当前所有句柄 --返回的是个列表
     3 handlers = driver.window_handles
     4 ele.click()
     5 time.sleep(10)
     6 
     7 #等待新窗口打开
     8 WebDriverWait(driver,10,0.5).until(EC.new_window_is_opened(handlers))
     9 #获取当前所有句柄
    10 handlers= driver.window_handles
    11 #切换到最后一个句柄 -- 根据返回的列表下标取值
    12 driver.switch_to.window(handlers[-1])
    13 #滑动到页面最底部
    14 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    15 driver.current_window_handle()
    16 
    17 time.sleep(5)
    18 driver.quit()

     

  • 相关阅读:
    数组的简单操方法
    Java Script 流程控制语句(if判断、switch选择和循环)
    HTML,表单
    CSS盒子定位
    CSS基础选择器简单介绍
    java操作redis
    ios选择城市
    格式化java对象为json
    java冒泡排序法
    mongoDB group分组
  • 原文地址:https://www.cnblogs.com/simran/p/9235853.html
Copyright © 2020-2023  润新知