博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python selenium中iframe切换、window切换方法
阅读量:4685 次
发布时间:2019-06-09

本文共 3800 字,大约阅读时间需要 12 分钟。

一、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 webdriverfrom time import sleepdriver = 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()# 切换iframedriver.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()# 退出iframedriver.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 webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom time import sleepdriver = 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出现,自动切换iframeWebDriverWait(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()# 退出iframedriver.switch_to.default_content()sleep(3) driver.quit()

  

二、selenium中window切换方法:

方法一:switch_to.window

  百度搜索腾讯课堂并打开  

from selenium import webdriverfrom 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_handlesprint('切换之前的窗口{}'.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 webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom 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_handlesprint('切换之前的窗口{}'.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()

 

 

转载于:https://www.cnblogs.com/lizhe860/p/9989265.html

你可能感兴趣的文章
Android广播发送失败
查看>>
博弈论之入门小结
查看>>
解决IE8下opacity属性失效问题,无法隐藏元素
查看>>
洛谷1002 过河卒
查看>>
C#匿名函数的坑
查看>>
标记页面控件尺寸
查看>>
批处理文件中的路径问题
查看>>
appium+python 环境搭建
查看>>
WampServer下修改和重置MySQL密码
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
Part2_lesson3---ARM寄存器详解
查看>>
深入理解vsto,开发word插件的利器
查看>>
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同!
查看>>
导入properties时的坑
查看>>
python——网络编程
查看>>
Spark的39个机器学习库
查看>>
Electron学习笔记(一)
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
查看>>
配置NRPE的通讯
查看>>