这篇总结主要是关于两方面的需求:其一,在浏览器不同tab标签页之间按时间切换(同事用来不停刷新grid crontol 监控页面);其二,实现开启多个窗口,并将窗口缩放到一定范围,并齐占满整个桌面,按不同的时间间隔刷新几个页面。
一、标签页之间切换
之前这个通过找了一个浏览器插件tab-rotator实现了其需求,并未写程序实现,后面没事的时候网上翻selenium资料写了一个,内容如下:
#code by www.361way.com from selenium.webdriver.common.keys import Keys from selenium import webdriver import time driver = webdriver.Firefox() driver.set_page_load_timeout(60) driver.implicitly_wait(15) # First Tab driver.get("https://www.baidu.com") oldtab = driver.current_window_handle print driver.title time.sleep(3) # Second Tab driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + "t") driver.get("http://www.361way.com/") newtab = driver.current_window_handle print driver.title time.sleep(3) # Go back to First Tab driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + Keys.PAGE_UP) driver.switch_to_window(oldtab) print driver.title driver.refresh() time.sleep(3) # Go to Second Tab again driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL + Keys.PAGE_UP) driver.switch_to_window(newtab) print driver.title time.sleep(3) driver.close()
这个只是简单的实现了单次循环,如果要实现不停循环,加一个while True死循环就可以了。selenium 的更多帮助可以参看官方手册,也可以去我网盘里查看pdf文档 。
二、多个窗口间切换
多个窗口间切换的代码如下:
#code by www.361way.com import win32gui,win32com.client #import win32con from selenium import webdriver import time def Broswer(url,x,y): browser = webdriver.Firefox() browser.set_window_size(480, 800) browser.get(url) browser.set_window_position(x, y) #browser.get('https://www.163.com') #browser.close() #browser.quit() def windowEnumerationHandler(hwnd, top_windows): if u"firefox" in win32gui.GetWindowText(hwnd).lower(): top_windows.append((hwnd, win32gui.GetWindowText(hwnd))) Broswer('http://www.so.com',0,0) Broswer('http://www.sogou.com',400,0) Broswer('http://www.baidu.com',800,0) if __name__ == "__main__": results = [] top_windows = [] win32gui.EnumWindows(windowEnumerationHandler, top_windows) '''for i in top_windows: if u"notepad" in i[1].lower(): print i #w3hd=win32gui.FindWindow('MozillaWindow',i[1]) #win32gui.MoveWindow(w3hd, 50, 50, 300, 200, True) #0:hiddle 1:display 2:min 3:max #win32gui.ShowWindow(w3hd,0) #win32gui.ShowWindow(w3hd, win32con.SW_MAXIMIZE) win32gui.ShowWindow(i[0],1) win32gui.SetForegroundWindow(i[0]) #break''' while True: for i in top_windows: #if u"firefox" in i[1].lower(): print i time.sleep(3) win32gui.ShowWindow(i[0],1) shell = win32com.client.Dispatch("WScript.Shell") shell.SendKeys('%') win32gui.SetForegroundWindow(i[0]) shell.SendKeys("^{F5}", 0)
这里的窗口位置和大小移动是通过selenium模块实现的,win32gui 模块也可以实现该功能,具体如下:
import win32gui # 查找状态栏窗口 shellTray = win32gui.FindWindow("Shell_TrayWnd", None) # 显示窗口 win32gui.ShowWindow(shellTray, 1) # 隐藏窗口 win32gui.ShowWindow(shellTray, 0) # 更改窗口大小和位置 win32gui.MoveWindow(window, 0, 0, 1440, 900, True) #最大化窗口 hwnd = win32gui.GetForegroundWindow() win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)
需在注意的是pywin32模块的帮助文档无通过help(模块名)查看,其单独有一个帮助文档 。
多窗口录制的视频及selenium相关的文档可以到本站的云盘获取:http://pan.baidu.com/s/1c2bXGGg