网上有很多是selenium基于python来获取两个窗口句柄与切换,本文实现用python+selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口),且在每个窗口下进行一个搜索或翻译,然后截图。

代码如下:

 # coding=utf-8
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.maximize_window() # 窗口最大化 driver.get('https://www.baidu.com') # 在当前浏览器中访问百度
time.sleep(2)
#print(driver.current_window_handle)# 输出当前窗口句柄(百度)
frist_handle = driver.current_window_handle # 新开一个窗口,通过执行js来新开一个窗口,访问搜狗
js='window.open("https://www.sogou.com");'
driver.execute_script(js) # 再新开一个窗口,通过执行js来新开一个窗口,访问有道
js='window.open("http://www.youdao.com/");'
driver.execute_script(js) handles = driver.window_handles # 获取当前窗口句柄集合(列表类型)
print(handles) # 输出句柄集合 for handle in handles:# 切换窗口(切换到有道)
if handle != frist_handle:
driver.switch_to_window(handle)
#print(driver.current_window_handle) # 输出当前窗口句柄(有道)
driver.find_element_by_id("translateContent").send_keys("selenium") #有道翻译selenium
driver.find_element_by_css_selector("button").click()
#driver.find_element_by_css_selector("[data-rlog='search-popup-close-win']").click()
driver.find_element_by_css_selector("[class='close js_close']").click() #关闭弹窗
driver.get_screenshot_as_file("D:\windows\\youdao.jpg") # 截图 可自定义截图后的保存位置(D:\windows)和图片命名(youdao.jpg)
time.sleep(5)
break
driver.close() #关闭当前窗口(有道) for handle in handles:# 切换窗口(切换到搜狗)
if handle != frist_handle:
driver.switch_to_window(handles[-1]) #此时只剩两个句柄,取最后一个
#print(driver.current_window_handle) # 输出当前窗口句柄(搜狗)
driver.find_element_by_id("query").send_keys("selenium") #搜狗搜索selenium
driver.find_element_by_id("stb").click()
time.sleep(2) #等待2s为了截完整搜索结果图
driver.get_screenshot_as_file("D:\windows\\sougou.jpg") # 截图 可自定义截图后的保存位置和图片命名
time.sleep(5)
break
driver.close() #关闭当前窗口(搜狗) #driver.switch_to_window(frist_handle) #切换回百度窗口
driver.switch_to_window(handles[0]) #切换回百度窗口
driver.find_element_by_id("kw").send_keys("selenium") #百度搜索selenium
driver.find_element_by_id("su").click()
time.sleep(2) #等待2s为了截完整搜索结果图
driver.get_screenshot_as_file("D:\windows\\baidu.jpg") #截图 可自定义截图后的保存位置和图片命名
time.sleep(5)
driver.quit() #退出浏览器

截图如下:

selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口)的更多相关文章

  1. selenium获取多窗口句柄并一切换至原窗口句柄(三个窗口)

    网上有很多是selenium基于python来获取两个窗口句柄与切换,本文实现用python+selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口),且在每个窗口下进行一个搜索或翻译,然后截 ...

  2. Selenium获取当前窗口句柄与切换回原窗口句柄

    Selenium通过window_handles获取当前窗口句柄,进行页面元素操作 切换回原窗口句柄,进行元素操作 代码如下:(python版) __author__ = 'liuke' import ...

  3. selenium获取新页面标签页(只弹出一个新页面的切换)

    selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...

  4. selenium多个标签页的切换(弹出新页面的切换)

    1_windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver.window_handles #获取全部页面句柄 for ...

  5. Python3.x:selenium获取iframe内嵌页面的源码

    Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...

  6. selenium获取元素后用click()点击没有作用,用Keys.ENTER就可以成功

    selenium获取元素后用click()点击没有作用,用键盘输入enter(Keys.ENTER)就可以成功 #coding = utf-8 from selenium import webdriv ...

  7. Python网络爬虫笔记(四):使用selenium获取动态加载的内容

    (一)  说明 上一篇只能下载一页的数据,第2.3.4....100页的数据没法获取,在上一篇的基础上修改了下,使用selenium去获取所有页的href属性值. 使用selenium去模拟浏览器有点 ...

  8. selenium 获取某元素的 某属性 的值

    selenium  获取某元素的 某属性的值 1 先通过元素定位,获得此元素的 WebElement; WebElement   yuansu = driver.findElement(By.clas ...

  9. python3+selenium获取列表某一列的值

    python3+selenium获取列表某一列的值 我们在坐自动化测试时,我们可能不想单纯的想验证一个选项卡,我们让脚本随机选择一个选项进行接下来的操作.例如我们想获取列表某一列的某一个数据(随机的) ...

随机推荐

  1. [css]零散的重构知识

    1.不建议这样写 font-family:"微软雅黑"; 建议 font-family:Microsoft YaHei; 因为有些网站不兼容中文(GB2312)的字符

  2. Coding源码学习第二部分(FunctionIntroManager.m)

    接上篇.上篇有一个细节忘了写,在Coding_iOS-Info.plist 里面添加了一个key 是 Status bar is initially hidden  Value 是 YES,在appl ...

  3. 一、Python 简介

    There should be one -- and preferably only one -- obvious way to do it. 一种解释型,面向对象的.带有动态语义的高级程序设计语言. ...

  4. spring事务详解(转载+高亮)

    spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活.编程式主要使用transactionTemplate.省略 ...

  5. HTML中强大的input标签属性

    用了许久的html,<input>这个标签是最常用的标签之一. <input type="">标签中type属性是必不可少的,以往我最常用的有 type=& ...

  6. UnitTesting中的ClassInitialize,ClassCleanup,TestInitialize,TestClearup

    ClassInitialize 标识一个包含代码的方法,这些代码必须在测试类中的任意测试运行之前使用,并用于分配测试类所使用的资源.此类不能被继承. http://msdn.microsoft.com ...

  7. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  8. WIN7-64位安装PLSQL-Developer步骤

    可参与网址http://tech.ddvip.com/2012-07/1343104017178927.html 以下操作是从网上搜索在64位WIN7测试通过,64位无法使用PL/SQL Develo ...

  9. ldap + kerberos + google authentication 实现两步验证

    第一步:ldap + kerberos 整合  ,参考之前的文章 第二步:google authentication 安装配置,参考之前的文章 第三步:整合 ldap + kerberos + goo ...

  10. Java中静态内部类的理解

    class A { public void func() { A a=new A(); C c=a.new C(); } public static void main(String[] args) ...