Python获取屏幕截图的几种方法
Python获取电脑截图有多种方式,具体如下:
PIL中的ImageGrab模块
windows API
PyQt
pyautogui
使用Selenium截图 PIL中的ImageGrab模块import time import numpy as np from PIL import ImageGrab img = ImageGrab.grab(bbox=(100, 161, 1141, 610)) img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3) # python实现全屏截图: from PIL import ImageGrab im = ImageGrab.grab() #可以添加一个坐标元组进去 im.save("F:12.png")
使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需0.5s。windows API
调用windows API,速度快但是使用较复杂,这里就不做详细介绍了,因为有更好用的PyQt。import time import win32gui, win32ui, win32con, win32api def window_capture(filename): hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDC mfcDC = win32ui.CreateDCFromHandle(hwndDC) # mfcDC创建可兼容的DC saveDC = 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) # 截取从左上角(0,0)长宽为(w,h)的图片 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)PyQt
PyQt比调用windows API简单很多,而且有windows API的很多优势,比如速度快,可以指定获取的窗口,即使窗口被遮挡。需注意的是,窗口最小化时无法获取截图。
首先需要获取窗口的句柄。import win32gui hwnd_title = dict() def get_all_hwnd(hwnd,mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)}) win32gui.EnumWindows(get_all_hwnd, 0) for h,t in hwnd_title.items(): if t is not "": print(h, t)
程序会打印窗口的hwnd和title,有了title就可以进行截图了。from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import * import win32gui import sys hwnd = win32gui.FindWindow(None, "C:Windowssystem32cmd.exe") app = QApplication(sys.argv) screen = QApplication.primaryScreen() img = screen.grabWindow(hwnd).toImage() img.save("screenshot.jpg")pyautogui
pyautogui是比较简单的,但是不能指定获取程序的窗口,因此窗口也不能遮挡,不过可以指定截屏的位置,0.04s一张截图,比PyQt稍慢一点,但也很快了。import pyautogui import cv2 img = pyautogui.screenshot(region=[0,0,100,100]) # x,y,w,h # img.save("screenshot.png") img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)使用Selenium截图
使用Selenium只能进行WEB程序截图from selenium import webdriver import time def capture(url, filename="capture.png"): browser = webdriver.Chrome(r"C:UsersweidiaoDesktopchromedriver_win32chromedriver.exe") browser.set_window_size(1200, 900) browser.get(url) # Load page browser.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: break time.sleep(1) beg = time.time() for i in range(10): browser.save_screenshot(filename) end = time.time() print(end - beg) browser.close() capture("//www.xx.net")
常用的Vim操作命令整理相信大家应该都用过Linux系统中的Vim编辑器,那今天我们就来整理一下常用的Vim操作命令,虽然相关的文章大都千篇一律,但主要的目的还是自己写下来,印象会更深刻,并且方便以后查阅
家用中央空调该如何选择市面上中央空调琳琅满目种类繁多,作为客户来说容易挑花眼,到最后很迷茫不知道该怎么选择,下面就跟我来一起看看吧!手把手教你如何选择适合自己的家用中央空调。一国产品牌中央空调格力和美的
蚂蚁集团安全科技eKYC产品通过全球ampampquot最严ampampquot数据安全审计已在海外服务上亿人记者获悉,近期蚂蚁集团旗下安全科技ZOLOZ的eKYC产品通过SOC2Type2审计,获得安永会计师事务所出具的报告,这意味着该产品在数据安全服务安全及服务高可用等方面已达到国际超
全网首播中国空气能领军品牌派沃空气能新品发布会圆满结束4月8日2000,派沃空气能重磅新品(太空舱级静音黑科技)静享A7系列地暖中央空调,全球首发,通过直播形式正式与全国消费者见面!伴随着发布会的开幕,派沃空气能新品静享A7系列地暖中
W6是威马汽车世界系列一款车型设计感十足随着碳中和碳峰目标的提出,人们的环保意识越来越强,生态概念也大大提高。智能新能源汽车作为一种低碳排放交通工具,已成为实现碳中和碳峰目标的主要力量。作为中国硬技术创新的代表,威马汽车
手机出货量下滑,务实消费已经来临严奇近日,包括中国信通院在内的多方数据显示,国内手机市场不振,出货量接连下滑,年轻人为什么不愿意换手机了还冲上微博热搜,引发讨论。这是因为啥?不少网友认为,目前手机创新不足,连外观
iQOO手机质量可靠吗?IQOO是vivo旗下的产品,vivo和OPPO是国产手机中品控最好的两个牌子,所以他们旗下的iQOO和realme的质量也不会差,会比华为和小米好。100质量可靠,因为本人用的手
电车取代油车离现实还有多远?比亚迪停止燃油汽车整车生产的消息在业界引起轩然大波。比亚迪第一百万辆新能源乘用车汉EV下线比亚迪供图停产的消息一经发布,就引发了讨论,有人借此断言燃油车的死期已近,事实真如此?中新
新能源汽车4月销量公布!不进步就淘汰,反映太多现实问题不要以为你现在过得还不错,就代表以后也不会差。图片来源网络40年前你要是会开车,你就算有铁饭碗了,30年前你要是会英语和计算机,那你绝对是人才。在20年前,联通和移动光在过年那一天
涨价潮持续,多家车企再调价4月7日,特斯拉美国官网显示,特斯拉部分车型再次涨价,其中美国Model3LongRange(长续航版)和Performance(高性能版版)车型的售价均有不同程度的涨幅。具体来看
对京东有极强控制欲的刘强东为什么辞职?奶茶妹妹又在干嘛?京东创始人刘强东曾经不止一次这样说过如果失去了京东的控制权,就会第一时间将京东卖掉,拿钱走人。对自己创办的京东有如此强控制欲的刘强东,前几天突然辞任集团CEO,决定放权,颇有一种不