最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python屏幕抓取和錄制的詳細代碼示例

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

一、常用 Python 屏幕抓取庫

  • Pillow(PIL):可以截圖,但功能有限,推薦配合其他庫使用。
  • pyautogui:簡單、跨平臺,支持全屏截圖和區(qū)域截圖。
  • mss:高性能,支持多平臺,適合大規(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 截屏(僅部分平臺支持)

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 進一步處理,比如識別、加水印、裁剪等。

七、注意事項

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

八、常見用途

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

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

1. 抓取指定窗口

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

Windows 平臺推薦:pygetwindow + pyautogui 或 mss

步驟:

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

示例代碼:

安裝依賴:

pip install pygetwindow pyautogui ms
import pygetwindow as gw
import pyautogui

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

# 獲取某個窗口(如“記事本”)
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. 自動識別屏幕內(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
  • 自動識別內(nèi)容:pytesseract(OCR)
  • 屏幕錄制:opencv/mss

十、自動化、定時抓取、窗口變化檢測

1. 自動化與定時抓取

可以用 schedule、threading、time 等庫實現(xiàn)定時任務(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)容刷新、彈窗等
  • 窗口位置/尺寸變化:比如用戶拖動/縮放窗口

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

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

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)容變化(像素級)

可以對比兩次截圖的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. 自動化綜合示例(定時+變化檢測+OCR)

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

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ā)生變化,進行OCR識別...')
        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. 線程/異步:不阻塞主線程

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

5. 進階建議

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

總結(jié) 

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

相關(guān)文章

最新評論

海口市| 丰台区| 茂名市| 赤城县| 黄山市| 荣成市| 炎陵县| 红河县| 青川县| 黎城县| 凤翔县| 定州市| 丰顺县| 潼关县| 太仓市| 宁南县| 白朗县| 象州县| 女性| 犍为县| 眉山市| 青铜峡市| 民乐县| 临泉县| 陆川县| 新营市| 永修县| 广德县| 宜春市| 雷波县| 瑞昌市| 阿拉善右旗| 阿克| 广昌县| 台北市| 利津县| 惠安县| 将乐县| 通渭县| 射洪县| 石台县|