zoukankan      html  css  js  c++  java
  • python selenium中iframe切换、window切换方法

    一、selenium中iframe切换方法:

    方法一:switch_to.frame

      frame函数中提供了三种定位方法:by index, name, or webelement。

      •   driver.switch_to.frame('frame_name')
      •   driver.switch_to.frame(1)
      •   driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

      以腾讯课堂为例:

    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get('https://ke.qq.com/')
    driver.implicitly_wait(20)
    driver.maximize_window()
    # 点击登录
    driver.find_element_by_id('js_login').click()
    # 点击QQ登陆
    driver.find_element_by_xpath('//div[@class="content-btns"]/a[1]').click()
    # 切换iframe
    driver.switch_to.frame('login_frame_qq')
    # 点击账号密码登陆
    driver.find_element_by_id('switcher_plogin').click()
    # 输入帐号
    driver.find_element_by_id('u').send_keys('*********')
    # 输入密码
    driver.find_element_by_id('p').send_keys('*********')
    # 点击登录
    driver.find_element_by_id('login_button').click()
    # 退出iframe
    driver.switch_to.default_content()
    sleep(3) 
    driver.quit()

    方法二:expected_conditions中frame_to_be_available_and_switch_to_it

          实现步骤:结合显性等待方法,等待iframe框出现后自动切换iframe,其方法内部调用了 switch_to.frame 方法(可以看源码),所以定位iframe的方法与方法一相同。

      以腾讯课堂为例:

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get('https://ke.qq.com/')
    driver.implicitly_wait(20)
    driver.maximize_window()
    # 点击登录
    driver.find_element_by_id('js_login').click()
    # 点击QQ登陆
    driver.find_element_by_xpath('//div[@class="content-btns"]/a[1]').click()
    # 等待iframe出现,自动切换iframe
    WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it("login_frame_qq"))
    # 点击账号密码登陆
    driver.find_element_by_id('switcher_plogin').click()
    # 输入帐号
    driver.find_element_by_id('u').send_keys('*********')
    # 输入密码
    driver.find_element_by_id('p').send_keys('*********')
    # 点击登录
    driver.find_element_by_id('login_button').click()
    # 退出iframe
    driver.switch_to.default_content()
    sleep(3) 
    driver.quit()

      

    二、selenium中window切换方法:

    方法一:switch_to.window

      百度搜索腾讯课堂并打开  

    from selenium import webdriver
    from time import sleep
    
    # 设置浏览器配置,取消‘Chrome正在受到自动软件的控制’的提示语
    option = webdriver.ChromeOptions()
    option.add_argument('disable-infobars')
    # 打开chrome浏览器,并执行设置
    driver = webdriver.Chrome(chrome_options=option)
    driver.implicitly_wait(30)
    driver.maximize_window()
    # 打开百度首页
    driver.get("https://www.baidu.com")
    # 输入 腾讯课堂
    driver.find_element_by_id('kw').send_keys('腾讯课堂')
    # 点击 百度一下
    driver.find_element_by_id("su").click()
    # 获取所有窗口
    windows = driver.window_handles
    print('切换之前的窗口{}'.format(windows))
    # 点击腾讯课堂链接
    driver.find_elements_by_xpath('//a[text()="_专业的在线教育平台(ke.qq.com)"]')[0].click()
    # 切换到新窗口
    driver.switch_to.window(driver.window_handles[-1])
    print('切换至后的窗口{}'.format(driver.current_window_handle))
    # 点击登录按钮
    driver.find_element_by_id('js_login').click()

     

    方法二:expected_conditions中new_window_is_opened 

          实现步骤:结合显性等待方法,等待新窗口打开,再进行切换

      百度搜索腾讯课堂并打开

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from time import sleep
    
    # 设置浏览器配置,取消‘Chrome正在受到自动软件的控制’的提示语
    option = webdriver.ChromeOptions()
    option.add_argument('disable-infobars')
    # 打开chrome浏览器,并执行设置
    driver = webdriver.Chrome(chrome_options=option)
    driver.implicitly_wait(30)
    driver.maximize_window()
    # 打开百度首页
    driver.get("https://www.baidu.com")
    # 输入 腾讯课堂
    driver.find_element_by_id('kw').send_keys('腾讯课堂')
    # 点击 百度一下
    driver.find_element_by_id("su").click()
    # 获取所有窗口
    windows = driver.window_handles
    print('切换之前的窗口{}'.format(windows))
    # 点击腾讯课堂链接
    driver.find_elements_by_xpath('//a[text()="_专业的在线教育平台(ke.qq.com)"]')[0].click()
    # 判断新窗口打开
    WebDriverWait(driver,10).until(EC.new_window_is_opened(windows))
    # 切换到新窗口
    driver.switch_to.window(switch.window_handles[-1])
    print('切换至后的窗口{}'.format(driver.current_window_handle))
    # 点击登录按钮
    driver.find_element_by_id('js_login').click()

     

  • 相关阅读:
    信号的阻塞
    善用布尔值
    多线程
    手机号码合理性的判断
    P(n,x)实现
    兄弟分钱、海盗分赃
    简单四则运算的实现
    模板技术
    合并字符串
    交换机和路由器比较
  • 原文地址:https://www.cnblogs.com/lizhe860/p/9989265.html
Copyright © 2011-2022 走看看