使用 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()
中,那么您会看到所有文件都使用相同的名称。
您只创建了一次 date
和 name
- 在开始时 - 之后所有图像都使用相同的 date
和 name
。您必须在函数 ranged_pycapture()
.
中创建 date
和 name
而且您还必须 运行 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)
我目前正在使用 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()
中,那么您会看到所有文件都使用相同的名称。
您只创建了一次 date
和 name
- 在开始时 - 之后所有图像都使用相同的 date
和 name
。您必须在函数 ranged_pycapture()
.
date
和 name
而且您还必须 运行 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)