窗口切换

  我们在使用浏览器打开链接时,通常会存在2种情况:

  1. 在当前窗口打开,即覆盖。

  2. 新建窗口打开,保留原有窗口。

  示例:

  ·百度首页搜索:博客园。

  · 打开博客园官网,获取当前页精华帖的标题。

  · 回到百度输入框,并打印出 title。

  

  代码如下:

  from selenium import webdriver

  driver = webdriver.Chrome()

  driver.implicitly_wait(10)

  # 打开百度首页

  driver.get('http://baidu.com')

  # 输入 博客园 并点击 回车

  driver.find_element_by_id('kw').send_keys('博客园\n')

  # 找到博客园的官网,并点击;点击后会在新的窗口打开链接

  driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()

  # 打印当前窗口的 title

  print(driver.title)

  # 打印当前窗口的 url

  print(driver.current_url)

  # 点击博客园的 精华 贴

  driver.find_element_by_css_selector('a[title="编辑精选博文"]').click()

  ......

  输出结果如下:

  博客园_百度搜索

  https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD&rsv_pq=fb7d28ae0001abcf&rsv_t=06598quU7hn3kFKgkuBxhCIOyMaWnFVVXEjwlgeJppBhRahvfl8rUTZcZVQ&rqlang=cn&rsv_enter=1&rsv_sug3=3&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=348&rsv_sug4=348

  selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"a[title="编辑精选博文"]"}

  # 报错信息,未定位到该元素

  浏览器实现结果

  通过浏览器的实现结果,和代码的运行结果,可以判断出:即使web页面已跳转至新窗口,但是代码逻辑还在原有窗口。

  为解决该问题,我们需要引入 句柄 的概念:窗口句柄 ,粗略的理解,每个窗口对应一个句柄,句柄可认为是一个唯一长字符串。

  获取句柄的方法:

  · 获取当前页面句柄:driver.current_window_handle

  · 获取所有页面句柄:driver.window_handles

  通过句柄,我们可以进行窗口的切换。

  · 切换窗口:driver.switch_to.window()

  示例:

  from selenium import webdriver

  driver = webdriver.Chrome()

  driver.implicitly_wait(10)

  # 打开百度首页

  driver.get('http://baidu.com')

  # 输入 博客园 并点击 回车

  driver.find_element_by_id('kw').send_keys('博客园\n')

  # 找到博客园的官网,并点击;点击后会在新的窗口打开链接

  driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()

  # 打印出所有的句柄信息

  print(driver.window_handles)

  driver.quit()

  输出结果如下:

  ['CDwindow-998407BA3D6B34956871D337B6F377FE', 'CDwindow-844FF13AAEE0E14487AD368DEAA7A0AE']

  # 从结果中我们可以看出:

  # driver.window_handles的数据类型是一个 列表

  

  让我们回到上面的需求:此时我们唯一要做的就是,打开新的窗口后,代码切换至新窗口,并输出结果。

  from selenium import webdriver

  driver = webdriver.Chrome()

  driver.implicitly_wait(10)

  # 打开百度首页

  driver.get('http://baidu.com')

  # 输入 博客园 并点击 回车

  driver.find_element_by_id('kw').send_keys('博客园\n')

  # 找到博客园的官网,并点击;点击后会在新的窗口打开链接

  driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()

  # 打印当前窗口的 title

  print('切换前的title:',driver.title)

  # 切换至新窗口

  # 首先,我们要先获取到一个主句柄,作为灯塔,防止"迷路"

  mainWindow = driver.current_window_handle

  # 接着我们要获取所有的句柄信息,并赋值给 handles

  handles = driver.window_handles

  # 使用for循环,遍历所有的handles,以便判断

  for handle in handles:

      # 使用driver.switch_to.window()方法,切入句柄所在的窗口

      driver.switch_to.window(handle)

      # 判断 "代码" 是否在当前窗口的title中,如果在,跳出循环

      if "代码" in driver.title:

          break

  # 让我们打印一下当前窗口的 title

  print('切换后的title:',driver.title)

  # 点击博客园的 精华 贴

  driver.find_element_by_css_selector('a[title="编辑精选博文"]').click()

  # 定位到标题的元素,并赋值给 items

  items = driver.find_elements_by_css_selector('div[class="post_item"] h3>a')

  for one in items:

      print(one.text)

  # 打印完成后,切回主窗口,并打印出当前窗口的 title

  driver.switch_to.window(mainWindow)

  print('切回主句柄的title:',driver.title)

  输出结果如下:

  切换前的title: 博客园_百度搜索

  切换后的title: 博客园 - 代码改变世界

  ------------------2021-5-30 前20的精华帖-----------------------------

  【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看

  【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

  为啥程序会有bug

  关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁

  ERP不规范,同事两行泪

  只有程序员才能读懂的西游记

  从软件工程的角度解读任正非的新年公开信

  通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。

  分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

  神经网络的基本工作原理

  哎呀,我老大写Bug啦——记一次MessageQueue的优化

  机器学习web服务化实战:一次吐血的服务化之路

  Windbg分析高内存占用问题

  我是怎么把一个项目带崩的

  彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践

  Linux的内存分页管理

  通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

  藏在正则表达式里的陷阱

  你所不知道的日志异步落库

  为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?

Selenium如何使用句柄方式切换窗口?相关推荐

  1. selenium切换窗口

    在做网页自动化测试的时候,难免会打开很多个网页,那么,如何在多个窗口之间切换呢? 获取窗口的唯一标识用句柄(handle)表示,因此只需要切换句柄,就可以灵活的在各窗口之间切换. 下面介绍几个方法 c ...

  2. python自动化测试selenium(四)切换页面、切换窗口

    一.切换页面 如果定位元素失败(抛出NoSuchElementException),调查网页源代码,发现这个元素位于一个frame或iframe标记的元素下的子网页(html标记)里,那么此时需要切换 ...

  3. 【Selenium】切换/窗口切换

    文章目录 1 frame切换 1.1 切换到frame 1.2 切回原来的主html 1.3 示例 2 窗口切换 2.1 切换新窗口 2.2 切回原来的窗口 2.3 示例 1 frame切换 1.1 ...

  4. python+selenium+new——窗口——网页——切换窗口——切换frame——alert弹窗

    from selenium import webdriver driver = webdriver.Firefox() # 指定浏览器驱动 #对象实例化 ----------------------- ...

  5. python自动切换链接_python+selenium自动化(四)之selenium切换窗口

    当我们点击某个链接时,切换换到另一个窗口,这时就需要跟随切换到新打开的页面,去定位元素. 1.获取当前页面句柄  current_window_handle importtimefrom seleni ...

  6. Web自动化测试Selenium(4)frame切换/窗口切换/选择框-2021-10-09

    1. frame切换 1.1 问题描述 选择 class 属性值为 plant 的元素. elements = wb.find_element_by_css_selector('.plant') 表示 ...

  7. Python用selenium简单方法处理完子窗口切换到主窗口

    百度是一个很好的例子 完成依次点击导航栏标签,前往次级页面进行处理完毕后再关闭并返回主界面的操作 最主要的就是掌握切换窗口 slenium是死的,不是说你看到哪个窗口它就帮你处理哪个窗口,需要让它切换 ...

  8. Python+selenium 自动化-切换窗口页签、切换iframe框架。确定页面是否包含iframe方法。

    切换窗口页签: 0是左边第一个,-1是右边第一个. windows = driver.window_handles # 获得所有窗口的句柄 driver.switch_to.window(window ...

  9. selenium切换窗口 java_WebDriver(Selenium2) 根据新窗口title切换窗口

    [在web自动化测试中点击一个链接然后弹出新窗口是比较司空见惯的事情.webdriver中处理弹出窗口跟处理frame差不多,以下面的html代码为例window.html      Popup Wi ...

  10. Python+selenium 自动化-通过窗口名切换窗口,如何获取当前窗口的title窗口名

    通过索引切换窗口 左边从0开始,-1是右边第一个窗口 windows = driver.window_handles driver.switch_to.window(windows[-1]) 通过窗口 ...

最新文章

  1. VTK:相互作用之ImageRegion
  2. MYSQL----myownstars(102)
  3. android读取excel文件_python里读写excel等数据文件的几种常用方式
  4. python 小海龟鼠标画图_Python小海龟画图
  5. 浅析数据库设计三范式
  6. CGAL学习记录——点云密度计算
  7. ByteBuf浅层复制的使用
  8. uniapp使用IPA苹果支付
  9. 3D游戏编程与设计5——与游戏世界交互
  10. Comparing Mongo DB and Couch DB
  11. LaTeX 参考文献的处理
  12. Python的exec
  13. sms 短信通平台 发送短信
  14. Parellel TSP
  15. js 点击按钮或者图片,实现图片上传并显示在页面上
  16. js 防抖是什么 JavaScript防抖怎么用
  17. 财务内部收益率用计算机怎么算,财务内部收益率的计算
  18. 牛客SQL 大厂面试真题 某滴打车 6套代码及解析
  19. 正则表达式八道练习题
  20. 计算机应用 pdf,计算机应用70546.pdf

热门文章

  1. 《硅谷增长黑客实战笔记》读书笔记(一)
  2. 玉米社:网站打开慢,如何提升网站打开速度?
  3. curl_multi异步高并发服务实现
  4. githubpage 配置 出现DNS解析失败
  5. Learn Git Branching 小游戏总结
  6. AI算法可帮助因气候变化而流离失所的数百万难民找到新家了!
  7. STC12C5A60S2输出时钟频率
  8. 计算机网络会议和期刊
  9. 中国域名8大玩家传奇故事
  10. 神秘病毒现形 网购当心黑客“点杀”