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

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

代码如下:

 1 # coding=utf-8
 2 from selenium import webdriver
 3 import time
 4
 5 driver = webdriver.Chrome()
 6 driver.maximize_window() # 窗口最大化
 7
 8 driver.get(‘https://www.baidu.com‘) # 在当前浏览器中访问百度
 9 time.sleep(2)
10 #print(driver.current_window_handle)# 输出当前窗口句柄(百度)
11 frist_handle = driver.current_window_handle
12
13 # 新开一个窗口,通过执行js来新开一个窗口,访问搜狗
14 js=‘window.open("https://www.sogou.com");‘
15 driver.execute_script(js)
16
17 # 再新开一个窗口,通过执行js来新开一个窗口,访问有道
18 js=‘window.open("http://www.youdao.com/");‘
19 driver.execute_script(js)
20
21 handles = driver.window_handles # 获取当前窗口句柄集合(列表类型)
22 print(handles) # 输出句柄集合
23
24 for handle in handles:# 切换窗口(切换到有道)
25     if handle != frist_handle:
26         driver.switch_to_window(handle)
27         #print(driver.current_window_handle)  # 输出当前窗口句柄(有道)
28         driver.find_element_by_id("translateContent").send_keys("selenium")  #有道翻译selenium
29         driver.find_element_by_css_selector("button").click()
30         driver.get_screenshot_as_file("D:\windows\\youdao.jpg")  # 截图  可自定义截图后的保存位置(D:\windows)和图片命名(youdao.jpg)
31         time.sleep(5)
32         break
33 driver.close() #关闭当前窗口(有道)
34
35 for handle in handles:# 切换窗口(切换到搜狗)
36     if handle != frist_handle:
37         driver.switch_to_window(handles[-1]) #此时只剩两个句柄,取最后一个
38         #print(driver.current_window_handle)  # 输出当前窗口句柄(搜狗)
39         driver.find_element_by_id("query").send_keys("selenium")  #搜狗搜索selenium
40         driver.find_element_by_id("stb").click()
41         time.sleep(2)  #等待2s为了截完整搜索结果图
42         driver.get_screenshot_as_file("D:\windows\\sougou.jpg")  # 截图  可自定义截图后的保存位置和图片命名
43         time.sleep(5)
44         break
45 driver.close() #关闭当前窗口(搜狗)
46
47 driver.switch_to_window(frist_handle) #切换回百度窗口
48 driver.find_element_by_id("kw").send_keys("selenium")  #百度搜索selenium
49 driver.find_element_by_id("su").click()
50 time.sleep(2) #等待2s为了截完整搜索结果图
51 driver.get_screenshot_as_file("D:\windows\\baidu.jpg")  #截图  可自定义截图后的保存位置和图片命名
52 time.sleep(5)
53 driver.quit() #退出浏览器

截图如下:

时间: 2024-10-26 06:50:26

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

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

Selenium通过window_handles获取当前窗口句柄,进行页面元素操作 切换回原窗口句柄,进行元素操作 代码如下:(python版) __author__ = 'liuke' import unittest,time,re from selenium import webdriver class Untitled(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.impl

selenium获取元素内容,iframe切换,和常用方法

获取元素信息 1. text 属性,显示该元素在web页面显示出来的文本内容 2. get_attribute方法 获取某个属性的值: element.get_attribute(元素属性) element.get_attribute('href') element.get_attribute('style') 获取该元素对应HTML源代码: element.get_attribute('outerHTML') 获取该元素的内部部分的HTML源代码: element.get_attribute(

selenium 获取table数据

public class Table { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub WebDriver driver = ExplorerBase.IESetting(); String url = "http://zs.njust.edu.cn/newzs/news/zhxw/20140710151805.htm"; driver.m

JSCover+WebDriver/Selenium获取JS代码覆盖率

我们在看JSCover(http://tntim96.github.io/JSCover/manual/manual.xml)介绍及使用说明的时候,往往被图形界面所吸引.这种方式比较适合手工操作,点击和输入即可. 但是这种往往界面和真实界面相差比较大,因为真正的网页在JSCover内部的浏览加载框中.这使得原有的Selenium代码可能存在诸多问题.那么如何能够尽量少地改变原有的selenium代码而又获取到js的code coverage呢?这可以采用文件模式(File Mode). 1. I

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

selenium获取元素后用click()点击没有作用,用键盘输入enter(Keys.ENTER)就可以成功 #coding = utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://www.baidu.com") driver.find_element_by_xpath(&

Android自定义通知布局Notification,点击Notification导航切换回原Activity

一个简单的应用场景:假如用户打开Activity以后,按Home键,此时Activity 进入-> onPause() -> onStop() 不可见.代码在此时机发送一个Notification到通知栏.当用户点击通知栏的Notification后,又重新onRestart() -> onStart() -> onResume() 切换回原Activity. package zhangphil.pendingintent; import android.os.Bundle; im

进程切换switch_to宏第三个参数分析

进程切换一般都涉及三个进程,如进程a切换成进程b,b开始执行,但是当a恢复执行的时候往往是通过一个进程c,而不是进程b. 注意switch_to的调用: switch_to(prev,next,prev), 可以看到last就是prev 调用方法如下:进程A->进程B switch_to(A,B,A)主要有三个参数:输入参数两个:prev:切换前的进程 next:切换后的进程 输出参数一个:last:切换前进程  注意这三个变量都是局部变量,在系统栈中,所以切换到另一进程后变量的值不会改变.进程

selenium 窗口句柄之间的切换

以前使用selenium时都是在单窗口的模式下,本次新增多窗口下的窗口之间切换 from selenium import webdriver from selenium.webdriver.common.keys import Keys import selenium.webdriver.support.ui as ui from selenium.webdriver.common.action_chains import ActionChains #完成点击下载ppt def get_ppt_

[Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(InfoBox),这也是毕业设计实体对齐和属性的对齐的语料库前期准备工作.希望文章对你有所帮助~ 源代码 1 # coding=utf-8 2 """ 3 Created on 2015-09-04 @author: Eastmount 4 """ 5