制作网站素材,临沂百度seo,网页及网站建设用什么软件,网络规划设计师待遇使用windows API使用PIL中的ImageGrab模块下面对两者的特点和用法进行详细解释。一、Python调用windows API实现屏幕截图好处是灵活速度快缺点是#xff1a;写法繁琐不跨平台import timeimport win32gui, win32ui, win32con, win32apidef window_capture(filename):hwnd 0 #…使用windows API使用PIL中的ImageGrab模块下面对两者的特点和用法进行详细解释。一、Python调用windows API实现屏幕截图好处是灵活速度快缺点是写法繁琐不跨平台import timeimport win32gui, win32ui, win32con, win32apidef window_capture(filename):hwnd 0 # 窗口的编号0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDCmfcDC win32ui.CreateDCFromHandle(hwndDC) # mfcDC创建可兼容的DCsaveDC mfcDC.CreateCompatibleDC() # 创建bigmap准备保存图片saveBitMap win32ui.CreateBitmap() # 获取监控器信息MoniterDev win32api.EnumDisplayMonitors(None, None)w MoniterDev[0][2][2]h MoniterDev[0][2][3] # print w,h #图片大小# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 高度saveDC将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap) # 截取从左上角(00)长宽为(wh)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, filename)beg time.time()for i in range(10):window_capture(haha.jpg)end time.time()print(end - beg)输出结果为0.375秒也就是说通过windows API每次截图只需要0.0375s真是快得一逼呀。二、使用PIL的ImageGrab模块import timeimport numpy as npfrom PIL import ImageGrab# 每抓取一次屏幕需要的时间约为1s,如果图像尺寸小一些效率就会高一些beg time.time()debug Falsefor i in range(10):img ImageGrab.grab(bbox(250, 161, 1141, 610))img np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)end time.time()print(end - beg)输出结果为4.015秒也就是说截取一次屏幕需要半秒钟更何况此处只截取了窗口的一部分矩形区域。所以ImageGrab模块能用是能用就是有点慢。三、使用Selenium截图使用Selenium只能进行WEB程序截图使用Selenium的各个浏览器需要制定驱动的位置驱动下载地址参见Selenium 官网from selenium import webdriverimport timedef capture(url, filenamecapture.png):browser webdriver.Chrome(rC:\Users\weidiao\Desktop\chromedriver_win32\chromedriver.exe)browser.set_window_size(1200, 900)browser.get(url) # Load pagebrowser.execute_script( (function () { var y 0; var step 100; window.scroll(0, 0); function f() { if (y document.body.scrollHeight) { y step; window.scroll(0, y); setTimeout(f, 50); } else { window.scroll(0, 0); document.title scroll-done; } } setTimeout(f, 1000); })(); ) for i in range(30): if scroll-done in browser.title: breaktime.sleep(1)beg time.time() for i in range(10):browser.save_screenshot(filename)end time.time() print(end - beg)browser.close()capture(http://www.cnblogs.com/weidiao)打印时间为3.033s速度介于windows API和PIL ImageGrab模块之间。