一、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()

最新文章

  1. MAC下搭建及使用XAMPP的详细教程
  2. dedecms /member/buy_action.php Weak Password Vulnerability Algorithm Vul
  3. MVC中利用自定义的ModelBinder过滤关键字
  4. [收藏夹整理]OpenCV部分
  5. 华为OJ平台——字符串通配符
  6. maximum-gap(经过了提示)
  7. 异常:HRESULT: 0x80070057 (E_INVALIDARG) 的处理
  8. JAXB - Annotations, Annotations for Enums: XmlEnum, XmlEnumValue
  9. 关于百度地图API的地图坐标转换问题
  10. VS2010/MFC对话框一:创建对话框模板和修改对话框属性
  11. java Json字符串转List<Map>类型
  12. CSS三大样式
  13. 使用 LINQPad 助力 LINQ 学习
  14. 读《Tooth-Marked Tongue Recgnition Using Multiple Instance Learning and CNN Features》
  15. Spring中使用Ehcache的方法和注意事项
  16. BZOJ2120 数颜色 莫队 带修莫队
  17. [ 转载 ] ssh连接远程主机执行脚本的环境变量问题
  18. excel快速访问工具栏和自定义选项卡
  19. LeetCode 326 Power of Three(3的幂)(递归、Log函数)
  20. subnet partition

热门文章

  1. Java多线程 - 线程组
  2. Sql server锁机制
  3. 第11章:最长公共子序列(LCS:Longest Common Subsequence)
  4. ggplot 画 条形图
  5. vue开发者工具DejaVue
  6. HDU-2224-双调TSP
  7. 数据挖掘算法Analysis Services-基于SQL Server的数据挖掘
  8. ./startup.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录 解决办法
  9. 数据库设计系列之四--ER图
  10. (四)canvas绘制路径