这篇总结主要是关于两方面的需求:其一,在浏览器不同tab标签页之间按时间切换(同事用来不停刷新grid crontol 监控页面);其二,实现开启多个窗口,并将窗口缩放到一定范围,并齐占满整个桌面,按不同的时间间隔刷新几个页面。

一、标签页之间切换

之前这个通过找了一个浏览器插件tab-rotator实现了其需求,并未写程序实现,后面没事的时候网上翻selenium资料写了一个,内容如下:

 1#code by www.361way.com
 2from selenium.webdriver.common.keys import Keys
 3from selenium import webdriver
 4import time
 5driver = webdriver.Firefox()
 6driver.set_page_load_timeout(60)
 7driver.implicitly_wait(15)
 8# First Tab
 9driver.get("https://www.baidu.com")
10oldtab = driver.current_window_handle
11print driver.title
12time.sleep(3)
13# Second Tab
14driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + "t")
15driver.get("https://blog.361way.com/")
16newtab = driver.current_window_handle
17print driver.title
18time.sleep(3)
19# Go back to First Tab
20driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + Keys.PAGE_UP)
21driver.switch_to_window(oldtab)
22print driver.title
23driver.refresh()
24time.sleep(3)
25# Go to Second Tab again
26driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + Keys.PAGE_UP)
27driver.switch_to_window(newtab)
28print driver.title
29time.sleep(3)
30driver.close()

这个只是简单的实现了单次循环,如果要实现不停循环,加一个while True死循环就可以了。selenium 的更多帮助可以参看官方手册,也可以去我网盘里查看pdf文档 。

二、多个窗口间切换

多个窗口间切换的代码如下:

 1#code by www.361way.com
 2import win32gui,win32com.client
 3#import win32con
 4from selenium import webdriver
 5import time
 6def  Broswer(url,x,y):
 7    browser = webdriver.Firefox()
 8    browser.set_window_size(480, 800)
 9    browser.get(url)
10    browser.set_window_position(x, y)
11    #browser.get('https://www.163.com')
12    #browser.close()
13    #browser.quit()
14def windowEnumerationHandler(hwnd, top_windows):
15    if u"firefox" in win32gui.GetWindowText(hwnd).lower():
16       top_windows.append((hwnd, win32gui.GetWindowText(hwnd)))
17Broswer('http://www.so.com',0,0)
18Broswer('http://www.sogou.com',400,0)
19Broswer('http://www.baidu.com',800,0)
20if __name__ == "__main__":
21    results = []
22    top_windows = []
23    win32gui.EnumWindows(windowEnumerationHandler, top_windows)
24    '''for i in top_windows:
25        if u"notepad" in i[1].lower():
26            print i
27            #w3hd=win32gui.FindWindow('MozillaWindow',i[1])
28            #win32gui.MoveWindow(w3hd, 50, 50, 300, 200, True)
29            #0:hiddle 1:display  2:min   3:max
30            #win32gui.ShowWindow(w3hd,0)
31            #win32gui.ShowWindow(w3hd, win32con.SW_MAXIMIZE)
32            win32gui.ShowWindow(i[0],1)
33            win32gui.SetForegroundWindow(i[0])
34            #break'''
35    while True:
36      for i in top_windows:
37        #if u"firefox" in i[1].lower():
38        print i
39        time.sleep(3)
40        win32gui.ShowWindow(i[0],1)
41        shell = win32com.client.Dispatch("WScript.Shell")
42        shell.SendKeys('%')
43        win32gui.SetForegroundWindow(i[0])
44        shell.SendKeys("^{F5}", 0)

这里的窗口位置和大小移动是通过selenium模块实现的,win32gui 模块也可以实现该功能,具体如下:

 1import win32gui
 2# 查找状态栏窗口
 3shellTray = win32gui.FindWindow("Shell_TrayWnd", None)
 4# 显示窗口
 5win32gui.ShowWindow(shellTray, 1)
 6# 隐藏窗口
 7win32gui.ShowWindow(shellTray, 0)
 8# 更改窗口大小和位置
 9win32gui.MoveWindow(window, 0, 0, 1440, 900, True)
10#最大化窗口
11hwnd = win32gui.GetForegroundWindow()
12win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)

需在注意的是pywin32模块的帮助文档无通过help(模块名)查看,其单独有一个帮助文档 。

多窗口录制的视频及selenium相关的文档可以到本站的云盘获取:http://pan.baidu.com/s/1c2bXGGg