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

python selenium中iframe切换、window切换方法的更多相关文章

  1. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  2. python+selenium的frame表单切换

    switch_to.frame()                               切换frame switch_to.default_content()                切 ...

  3. selenium中的多窗口切换

    在selenium中,我们会遇到一些问题,就是多窗口处理的问题,我们爬取的内容在一个新窗口上,这个时候,我们就需要先切换到这个新的窗口上,然后进行抓取内容. 如何切换呢? 首先,获取当前窗口句柄 1. ...

  4. python+selenium五:多窗口切换与获取句柄

    from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdri ...

  5. python+selenium:iframe框架中多种定位

    方法一:通过索引,id,name,WebElement定位 from selenium import webdriverdriver = webdriver.Firefox()driver.switc ...

  6. python多线程中join()方法和setDaemon()方法的区别

    """ join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...

  7. Python: 类中为什么要定义__init__()方法

    学习并转自:https://blog.csdn.net/geerniya/article/details/77487941 1. 不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. c ...

  8. selenium中iframe的切换

    #第一层是默认层, 第二层是新建标签的层,第三层是百度的那层from selenium import webdriverimport timedriver=webdriver.Chrome()driv ...

  9. python+selenium之多表单切换

    在Web应用中经常会遇到fram/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于fram/iframe表单内嵌套页面上的元素无法直接定位.这是需要通过swit ...

随机推荐

  1. pxcook-高效易用的自动标注工具, 生成前端代码

    1.pxcook.sketch(http://www.fancynode.com.cn/pxcook)

  2. 18-THREE.JS 基本材质

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  3. shell编程实例2

    1.vim  read_PERSON.sh 2. #!/bin/bash echo "What is your name?" read PERSON echo "Hell ...

  4. NAVagationController

    UINavigationController为导航控制器,在iOS里经常用到. 1.UINavigationController的结构组成 UINavigationController有Navigat ...

  5. React Native探索(五)使用fetch进行网络请求

    相关文章 React Native探索系列 前言 React Native可以使用多种方式来请求网络,比如fetch.XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLH ...

  6. (三十八)js之柯里化

    先给大家介绍什么是柯里化与反柯里化 百度翻译: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的 ...

  7. 【解题报告】[动态规划] - PID90 / 未出现的子串

    原题地址:http://www.rqnoj.cn/problem/90 解题思路:题目看起来不太像动态规划... 我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没 ...

  8. 【PS实例】轻松打造梦幻的照片

    本系列教程将开始讲解PS的一些制作实例,通过实例的讲解同时介绍各种工具和面板机快捷键的使用,这样能够让大家更有兴趣学习,在学习的同时能够创造出自己喜欢的东西.本人使用的教程都是根据本人多次调试制作,仅 ...

  9. C# 方法、类等的默认访问修饰符

    C# 方法默认访问级别 : private C# 类默认访问级别 : internal 1.命名空间下的元素的默认访问修饰符 public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以 ...

  10. UITextField的使用总结

    初始化一个文字框: UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; 设置和获取文字框文 ...