做自动化过程中时长会遇到一些截图操作,那么在做客户端的时候,应该怎么进行截图呢?
窗口截图
在pywinauto中存在自带的截图函数 capture_as_image()
源码:
def capture_as_image(self, rect=None):
"""
Return a PIL image of the control.
See PIL documentation to know what you can do with the resulting
image.
"""
control_rectangle = self.rectangle()
if not (control_rectangle.width() and control_rectangle.height()):
return None
# PIL is optional so check first
if not ImageGrab:
print("PIL does not seem to be installed. "
"PIL is required for capture_as_image")
self.actions.log("PIL does not seem to be installed. "
"PIL is required for capture_as_image")
return None
if rect:
control_rectangle = rect
# get the control rectangle in a way that PIL likes it
width = control_rectangle.width()
height = control_rectangle.height()
left = control_rectangle.left
right = control_rectangle.right
top = control_rectangle.top
bottom = control_rectangle.bottom
box = (left, top, right, bottom)
# check the number of monitors connected
if (sys.platform == 'win32') and (len(win32api.EnumDisplayMonitors()) > 1):
hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc)
memdc = srcdc.CreateCompatibleDC()
bmp = win32ui.CreateBitmap()
bmp.CreateCompatibleBitmap(srcdc, width, height)
memdc.SelectObject(bmp)
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
bmpinfo = bmp.GetInfo()
bmpstr = bmp.GetBitmapBits(True)
pil_img_obj = Image.frombuffer('RGB',
(bmpinfo['bmWidth'], bmpinfo['bmHeight']),
bmpstr,
'raw',
'BGRX',
0,
1)
else:
# grab the image and get raw data as a string
pil_img_obj = ImageGrab.grab(box)
return pil_img_obj
实战
上面的操作方法已经了解了,我们实战进行操作,看看进行如何截图,这里我们截图后,要进行保存,可以根据路径保存或者直接保存在当前目录
# coding:utf-8
from pywinauto import Application
# 打开记事本
app = Application().start(r'C:\Windows\System32\notepad.exe')
win = app['无标题 - 记事本']
# 截图进行保存
a = win.capture_as_image().save('123.png')
来源:oschina
链接:https://my.oschina.net/u/4383691/blog/4404636