领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

屏幕截图不再难!使用 Python 捕捉任何窗口,秒变截图高手!

nixiaole 2025-01-02 18:13:16 知识剖析 21 ℃

引言:

代码包含如下三个方面:

  • 全屏截图:截取整个屏幕并保存。
  • 指定窗口截图:根据窗口标题查找窗口并截取该窗口的内容。
  • 保存截图:截图后自动保存为指定名称的文件。
import pyautogui

class ScreenCapture:
    """
    该类提供了屏幕截图的功能,支持全屏截图和指定窗口截图。
    """

    def full_screen(self, capture_name):
        """
        截取整个屏幕的截图并保存
        :param capture_name: 保存截图的文件名
        :return: None
        """
      #todo使用 pyautogui.screenshot() 获取整个屏幕的截图
        screenshot = pyautogui.screenshot()

      #todo将截图保存到指定路径
        screenshot.save(capture_name)
        
      #todo打印提示信息,告知用户截图已经保存
        print(f"全屏截图已保存至 {capture_name}")

    def window_capture(self, window_title, capture_name):
        """
        截取指定窗口的截图并保存
        :param window_title: 需要截取的窗口标题
        :param capture_name: 保存截图的文件名
        :return: None
        """
      #todo获取当前屏幕上符合 window_title 标题的窗口
        windows = pyautogui.getWindowsWithTitle(window_title)
        
      #todo检查是否找到了对应的窗口
        if not windows:
            print(f"未找到标题为 '{window_title}' 的窗口")
            return

      #todo获取窗口的左上角位置以及宽度和高度
        window = windows[0]
        left, top, width, height = window.left, window.top, window.width, window.height

      #todo使用 pyautogui.screenshot() 截取指定区域的截图,区域由窗口的左上角坐标和宽度高度决定
        screenshot = pyautogui.screenshot(region=(left, top, width, height))

      #todo将截图保存到指定路径
        screenshot.save(capture_name)

      #todo打印提示信息,告知用户窗口截图已经保存
        print(f"窗口 '{window_title}' 的截图已保存至 {capture_name}")

if __name__ == '__main__':
  #todo可以在这里测试脚本,进行全屏截图或窗口截图
  #todoExample usage:
  #todoScreenCapture().full_screen(capture_name='full_screen.png')
  #todoScreenCapture().window_capture(window_title='Notepad', capture_name='notepad.png')
    pass

在实现和使用屏幕截图功能时,有几个关键的注意事项需要考虑:

  • 窗口标题问题:pyautogui.getWindowsWithTitle() 方法是基于窗口标题来查找窗口的,因此窗口标题必须准确无误。如果窗口的标题发生变化(例如包含时间戳或动态内容),则无法正确捕获该窗口。
  • 多个相同窗口标题:如果多个窗口的标题相同,可能会导致无法准确选择目标窗口。此时可以通过更精确的条件(如窗口的具体位置或其他特征)来确保找到正确的窗口。
  • 使用合适的库:如果要实现更复杂的功能(如跨平台的窗口截图),可以考虑使用更专业的库,比如 Pillow 或 mss,它们在某些情况下可能比 pyautogui 更稳定和高效。
最近发表
标签列表