如何使用Python PyWin32截取浏览器内容

问题描述 投票:0回答:1

使用 PyWin32 捕获浏览器窗口(主要是 Google Chrome)的屏幕截图时,会生成空图像。而捕获其他控制台窗口会导致成功的图像捕获。

1) 为什么从浏览器捕获位图与从任何其他控制台窗口捕获位图不同?

2)如何在不使用其他Python库的情况下实现从浏览器捕获图像的目标,例如Selenium 或浏览器扩展?

注释;在我看来,RGB 像素信息应该存在并且可用,这是 python 无法渲染 HTML 的问题吗?使用 PyWin32 是因为速度很重要。代码灵感来自

nicholastsmith

wDC = win32gui.GetWindowDC(self.Console_Handle_Window)
dcObj = win32ui.CreateDCFromHandle(wDC)
cDC = dcObj.CreateCompatibleDC()
dataBitMap = win32ui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(dcObj, self.width, self.height)
cDC.SelectObject(dataBitMap)
cDC.BitBlt((0,0), (self.width, self.height), dcObj, (self.FrameSurpluss_left, self.FrameSurpluss_top), win32con.SRCCOPY)

bmInfo = dataBitMap.GetInfo()
bmpstr = dataBitMap.GetBitmapBits(True)

im = np.frombuffer(dataBitMap.GetBitmapBits(True), dtype = np.uint8)

dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(self.Console_Handle_Window, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())

return im.reshape(bmInfo['bmHeight'], bmInfo['bmWidth'], 4)[:,:,:]
python browser bitmap screenshot pywin32
1个回答
0
投票

使用 Google Chrome 可能无法做到这一点,但现在作为解决方法,您可以使用此方法来捕获 Microsoft Edge 的屏幕 - 请小心,因为 Microsoft Edge 浏览器窗口标题中有一个特殊字符,您需要使用此脚本来查明它:

import win32gui


def list_window_names():
    def winEnumHandler(hwnd, ctx):
        if win32gui.IsWindowVisible(hwnd):
            print(hex(hwnd), win32gui.GetWindowText(hwnd))
    win32gui.EnumWindows(winEnumHandler, None)


list_window_names()
© www.soinside.com 2019 - 2024. All rights reserved.