使用 pyautogui 和 PIL 时如何防止屏幕截图停止?

How do I prevent screenshot halting while using pyautogui and PIL?

我目前正在使用 pyautogui 编写一个函数,该函数截取我屏幕上特定区域的屏幕截图,另一个函数指示该屏幕截图函数自行重复。

我将 time.sleep(3) 设置在最顶部,让我自己在三秒钟内打开 e-reader 我正在尝试截屏。就目前而言,当我 运行 repeat_pycapture() 函数时,它仅将第一个屏幕截图保存到我的文件路径,然后继续单击新页面而不捕获和保存其他图像。我将屏幕截图名称设置为当前日期和时间,这样图像就不会被覆盖。我也尝试编写 for 循环和 while 循环来实现这一点,但是 运行 遇到了更多令人困惑的问题。

当我 运行 ranged_pycapture() 手动运行几次时,一切都按预期工作,但随后就破坏了自动化一切的整个目的。

time.sleep(3)

date = datetime.now()
name = str(date).replace(":", "")
pyshot_all = pyautogui.screenshot()
pyshot_range = pyautogui.screenshot(region = (630, 121, 641, 828))
py_save_path = "C:\(my custom path)"

def ranged_pycapture():
    pyshot_range.save("{}.jpg".format(name))
    pyautogui.click(1835, 1000)
    return py_save_path

def repeat_pycapture():
    schedule.every(0.7).seconds.do(ranged_pycapture)
    while True:
        schedule.run_pending()
        time.sleep(0.7)

repeat_pycapture()

我也使用 PIL 编写了这两个函数,但是 运行 完全相同的问题。我看了一个视频,其中一个人演示了如何每 5 秒自动截取一次屏幕截图并提供了他的代码,但即使在逐字复制他的代码之后,我 运行 也遇到了完全相同的问题。我还使用了不同版本的 Python(3.8、3.9 和 3.10),但无济于事。我错过了什么吗?任何社区见解都将不胜感激。

注意:测试这些功能的一个好方法是打开空白的 PowerPoint 演示文稿并让代码在幻灯片中循环。

如果将 print(name) 放在 ranged_pycapture() 中,那么您会看到所有文件都使用相同的名称。

您只创建了一次 datename - 在开始时 - 之后所有图像都使用相同的 datename。您必须在函数 ranged_pycapture().

中创建 datename

而且您还必须 运行 screenshot() 在此函数内才能获取新的屏幕截图。

def ranged_pycapture():

    date = datetime.now()
    name = str(date).replace(":", "")

    pyshot_range = pyautogui.screenshot(region=(630, 121, 641, 828))
    pyshot_range.save("{}.jpg".format(name))

    pyautogui.click(1835, 1000)

您可以直接使用 strftime 创建 name - 您可以直接使用 .jpg

name = datetime.now().strftime('%Y-%m-%d %H%M%S.%f.jpg'))
pyshot_range.save(name)