欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python屏幕抓取和錄制的詳細(xì)代碼示例

 更新時(shí)間:2025年09月25日 11:02:28   作者:燎原人生  
隨著現(xiàn)代計(jì)算機(jī)性能的提高和網(wǎng)絡(luò)速度的加快,越來越多的用戶需要對(duì)他們的屏幕進(jìn)行錄制,這篇文章主要介紹了Python屏幕抓取和錄制的相關(guān)資料,需要的朋友可以參考下

一、常用 Python 屏幕抓取庫

  • Pillow(PIL):可以截圖,但功能有限,推薦配合其他庫使用。
  • pyautogui:簡單、跨平臺(tái),支持全屏截圖和區(qū)域截圖。
  • mss:高性能,支持多平臺(tái),適合大規(guī)模、快速截圖。
  • opencv-python:可以處理截圖后的圖像,但本身不直接抓屏。

二、pyautogui 截屏示例

安裝:

pip install pyautogui

全屏截圖并保存:

import pyautogui

screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')

截取指定區(qū)域(左上角坐標(biāo)和寬高):

import pyautogui

region = (100, 100, 300, 200)  # x, y, width, height
screenshot = pyautogui.screenshot(region=region)
screenshot.save('region.png')

三、mss 高性能截圖

安裝:

pip install mss

全屏截圖:

import mss

with mss.mss() as sct:
    sct.shot(output='mss_full.png')

指定區(qū)域截圖:

import mss

with mss.mss() as sct:
    monitor = {"top": 100, "left": 100, "width": 300, "height": 200}
    sct_img = sct.grab(monitor)
    mss.tools.to_png(sct_img.rgb, sct_img.size, output="mss_region.png")

四、Pillow 截屏(僅部分平臺(tái)支持)

from PIL import ImageGrab

im = ImageGrab.grab()
im.save('pillow_screen.png')

五、屏幕錄制(視頻)

屏幕錄制需要更復(fù)雜的工具,比如 opencv-python + pyautogui 或 mss,也可以用第三方軟件或 ffmpeg。

簡單示例(錄制屏幕為視頻,需安裝 opencv-python):

import cv2
import numpy as np
import pyautogui

screen_size = pyautogui.size()
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("output.avi", fourcc, 20.0, screen_size)

for i in range(100):  # 錄制100幀
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)

out.release()
cv2.destroyAllWindows()

六、抓取后處理

抓取到的圖片可以用 Pillow 或 OpenCV 進(jìn)一步處理,比如識(shí)別、加水印、裁剪等。

七、注意事項(xiàng)

  • 部分庫在 macOS 需要額外設(shè)置權(quán)限(系統(tǒng)設(shè)置 → 安全與隱私 → 屏幕錄制)。
  • Linux 下部分庫依賴 X11。
  • 截屏速度和性能,推薦用 mss。

八、常見用途

  • 自動(dòng)化測試
  • 遠(yuǎn)程監(jiān)控
  • OCR 文字識(shí)別
  • 游戲/教學(xué)錄屏

九、抓取指定窗口、自動(dòng)識(shí)別屏幕內(nèi)容、屏幕錄制

1. 抓取指定窗口

抓取指定窗口通常需要獲取窗口句柄,然后截圖該窗口區(qū)域。不同操作系統(tǒng)方式略有不同,Windows支持最好。

Windows 平臺(tái)推薦:pygetwindow + pyautogui 或 mss

步驟:

  • 獲取窗口坐標(biāo)
  • 用截圖工具抓取該區(qū)域

示例代碼:

安裝依賴:

pip install pygetwindow pyautogui ms
import pygetwindow as gw
import pyautogui

# 獲取所有窗口標(biāo)題
print(gw.getAllTitles())

# 獲取某個(gè)窗口(如“記事本”)
win = gw.getWindowsWithTitle('記事本')[0]
print(win.left, win.top, win.width, win.height)

# 截取窗口區(qū)域
region = (win.left, win.top, win.width, win.height)
img = pyautogui.screenshot(region=region)
img.save('window.png')

用 mss 截取窗口區(qū)域

import mss

with mss.mss() as sct:
    monitor = {"top": win.top, "left": win.left, "width": win.width, "height": win.height}
    sct_img = sct.grab(monitor)
    mss.tools.to_png(sct_img.rgb, sct_img.size, output="window_mss.png")

macOS/Linux

獲取窗口位置需要用到pyobjc、python-xlib等,較為復(fù)雜,可參考 pygetwindow 文檔

2. 自動(dòng)識(shí)別屏幕內(nèi)容(OCR)

可以用百度OCR、騰訊OCR、Google Tesseract OCR等,最常用的是 Tesseract。

Tesseract OCR 示例

安裝:

pip install pytesseract pillow

并安裝 Tesseract 可執(zhí)行文件。

代碼:

from PIL import Image
import pytesseract

img = Image.open('window.png')
text = pytesseract.image_to_string(img, lang='chi_sim')  # 中文用 lang='chi_sim'
print(text)

結(jié)合窗口截圖和OCR

import pyautogui
from PIL import Image
import pytesseract
import pygetwindow as gw

win = gw.getWindowsWithTitle('記事本')[0]
region = (win.left, win.top, win.width, win.height)
img = pyautogui.screenshot(region=region)
img.save('window.png')

text = pytesseract.image_to_string(img)
print(text)

3. 屏幕錄制

方法一:用 OpenCV + pyautogui 錄制全屏或指定區(qū)域

安裝:

pip install opencv-python pyautogui numpy

錄制指定區(qū)域(如窗口):

import cv2
import numpy as np
import pygetwindow as gw
import pyautogui

win = gw.getWindowsWithTitle('記事本')[0]
region = (win.left, win.top, win.width, win.height)
width, height = win.width, win.height

fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("window_record.avi", fourcc, 10.0, (width, height))

for i in range(200):  # 錄制200幀
    img = pyautogui.screenshot(region=region)
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    out.write(frame)

out.release()
cv2.destroyAllWindows()

方法二:用 mss 錄制屏幕(高效)

import mss
import cv2
import numpy as np
import pygetwindow as gw

win = gw.getWindowsWithTitle('記事本')[0]
monitor = {"top": win.top, "left": win.left, "width": win.width, "height": win.height}
width, height = win.width, win.height

fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("window_mss_record.avi", fourcc, 10.0, (width, height))

with mss.mss() as sct:
    for i in range(200):
        sct_img = sct.grab(monitor)
        frame = np.array(sct_img)
        frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
        out.write(frame)

out.release()
cv2.destroyAllWindows()

總結(jié)

  • 抓取指定窗口:pygetwindow + pyautogui/mss
  • 自動(dòng)識(shí)別內(nèi)容:pytesseract(OCR)
  • 屏幕錄制:opencv/mss

十、自動(dòng)化、定時(shí)抓取、窗口變化檢測

1. 自動(dòng)化與定時(shí)抓取

可以用 schedule、threading、time 等庫實(shí)現(xiàn)定時(shí)任務(wù),比如每隔5秒抓取一次指定窗口內(nèi)容。

示例:每隔5秒抓取窗口截圖

import time
import pygetwindow as gw
import pyautogui
import datetime

WINDOW_TITLE = '記事本'  # 替換為你的目標(biāo)窗口標(biāo)題

def grab_window():
    wins = gw.getWindowsWithTitle(WINDOW_TITLE)
    if not wins:
        print(f'窗口"{WINDOW_TITLE}"未找到')
        return
    win = wins[0]
    region = (win.left, win.top, win.width, win.height)
    img = pyautogui.screenshot(region=region)
    timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
    filename = f'{WINDOW_TITLE}_{timestamp}.png'
    img.save(filename)
    print(f'保存截圖:{filename}')

if __name__ == '__main__':
    while True:
        grab_window()
        time.sleep(5)  # 每5秒抓取一次

2. 窗口變化檢測

窗口變化主要有兩類:

  • 窗口內(nèi)容變化:比如內(nèi)容刷新、彈窗等
  • 窗口位置/尺寸變化:比如用戶拖動(dòng)/縮放窗口

2.1 檢測窗口位置和尺寸變化

可以每次抓取前記錄窗口的坐標(biāo)和尺寸,和上一次對(duì)比:

import pygetwindow as gw
import time

WINDOW_TITLE = '記事本'

last_rect = None

while True:
    wins = gw.getWindowsWithTitle(WINDOW_TITLE)
    if not wins:
        print('窗口未找到')
        time.sleep(1)
        continue
    win = wins[0]
    rect = (win.left, win.top, win.width, win.height)
    if last_rect != rect:
        print(f'窗口變化:{rect}')
        last_rect = rect
    time.sleep(1)

2.2 檢測窗口內(nèi)容變化(像素級(jí))

可以對(duì)比兩次截圖的hash或像素差異,常用方法有:

  • Pillow ImageChops.difference
  • 感知哈希(pHash)

示例:用感知哈希檢測內(nèi)容變化

from PIL import Image
import imagehash
import pygetwindow as gw
import pyautogui
import time

WINDOW_TITLE = '記事本'
last_hash = None

while True:
    wins = gw.getWindowsWithTitle(WINDOW_TITLE)
    if not wins:
        print('窗口未找到')
        time.sleep(1)
        continue
    win = wins[0]
    region = (win.left, win.top, win.width, win.height)
    img = pyautogui.screenshot(region=region)
    hashval = imagehash.phash(img)
    if last_hash is not None and hashval != last_hash:
        print('窗口內(nèi)容發(fā)生變化!')
        img.save(f'changed_{time.time()}.png')
    last_hash = hashval
    time.sleep(2)

需要安裝 imagehash 和 pillow
pip install imagehash pillow

3. 自動(dòng)化綜合示例(定時(shí)+變化檢測+OCR)

綜合:每隔N秒抓取窗口,若內(nèi)容有變化則自動(dòng)OCR識(shí)別并保存文本。

import pygetwindow as gw
import pyautogui
import imagehash
from PIL import Image
import pytesseract
import time
import datetime

WINDOW_TITLE = '記事本'
last_hash = None

while True:
    wins = gw.getWindowsWithTitle(WINDOW_TITLE)
    if not wins:
        print('窗口未找到')
        time.sleep(2)
        continue
    win = wins[0]
    region = (win.left, win.top, win.width, win.height)
    img = pyautogui.screenshot(region=region)
    hashval = imagehash.phash(img)
    if last_hash is not None and hashval != last_hash:
        print('窗口內(nèi)容發(fā)生變化,進(jìn)行OCR識(shí)別...')
        text = pytesseract.image_to_string(img, lang='chi_sim')
        timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
        img.save(f'changed_{timestamp}.png')
        with open(f'changed_{timestamp}.txt', 'w', encoding='utf-8') as f:
            f.write(text)
    last_hash = hashval
    time.sleep(5)

4. 線程/異步:不阻塞主線程

如果你還想讓程序同時(shí)響應(yīng)用戶操作,可以用 threading 或 asyncio 實(shí)現(xiàn)非阻塞定時(shí)抓取。

5. 進(jìn)階建議

  • 多窗口監(jiān)控:遍歷多個(gè)窗口標(biāo)題。
  • 報(bào)警通知:內(nèi)容變化自動(dòng)發(fā)郵件/消息。
  • 日志記錄:記錄變化事件和時(shí)間。
  • 異常處理:防止窗口消失導(dǎo)致程序崩潰。

總結(jié) 

到此這篇關(guān)于Python屏幕抓取和錄制的文章就介紹到這了,更多相關(guān)Python屏幕抓取和錄制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論