Как исправить ошибку скриншота Python 3 PyAutoGUI?(MacOS) - PullRequest
0 голосов
/ 10 октября 2018

Я получаю сообщение об ошибке с любым из снимков экрана PyAutoGUI с такими функциями, как:

pyautogui.locateOnScreen('button.png')
pyautogui.pixelMatchesColor(x, y, (r, g, b))
im = pyautogui.screenshot()

Я получаю ошибку:

screencapture: cannot write file to intended destination, .screenshot2018-1009_16-43-26-003190.png
Traceback (most recent call last):
  File "~/program.py", line 111, in <module>
    pyautogui.locateOnScreen('/images/play!.png')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pyscreeze/__init__.py", line 265, in locateOnScreen
    screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here.
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pyscreeze/__init__.py", line 331, in _screenshot_osx
    im = Image.open(tmpFilename)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PIL/Image.py", line 2609, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '.screenshot2018-1009_16-43-26-003190.png'

Я не говорю об этом илихотите сохранить новое снимок экрана в любой каталог (и не должен).С помощью функции pyautogui.screenshot () я мог вручную сохранить ее в реальном каталоге в моем проекте, но у меня нет возможности сделать это с другими методами.Любая идея о том, как это исправить?

Что я пробовал:

  • Я просмотрел всю документацию, которую я мог найти в Интернете на скриншотах pyautogui
  • Перезагрузка компьютера
  • Понижение версии для Pillow и pyscreeze

РЕДАКТИРОВАТЬ: я пробовал на другом Mac и получил ту же ошибку.Пробовал на windows bootcamp (windows на моем mac) и работает нормально.

1 Ответ

0 голосов
/ 11 декабря 2018

возможно, очень хакерское исправление - мне не очень нравится этот ответ, но это было быстрое и простое исправление (сделано на OSX с Mojave):

ОБРАТИТЕ ВНИМАНИЕ: изменение исходного кода библиотекВы не понимаете, как правило, плохая идея, так что делайте это на свой страх и риск!Это сработало для меня, ваш milage может отличаться.

Перейдите к вашему файлу (ваш путь к файлу может отличаться, я только что скопировал это из вашей ошибки):

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pyscreeze/__init__.py

найдите строку подфункция "_screenshot_osx", которая выглядит как

tmpFilename = '.screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f'))

, скопируйте ее, а затем закомментируйте, вставьте скопированную строку прямо под закомментированный оригинал и измените ее следующим образом:

tmpFilename = r'<your preferred screenshot folder here>/screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f'))

сохраните изменения и посмотрите, работают ли они.

Также обратите внимание: pyautogui.locateOnScreen может быть немного привередливым, поэтому даже если это устранит вашу ошибку, вы все равно не сможете получить нужные координаты (может не вернуть ни одного).Это может быть связано с другой проблемой.Чтобы проверить эту часть, я делаю это:

import pyautogui
pyautogui.screenshot('testFull.png')
placePos = pyautogui.locateOnScreen('testFull.png')
print(placePos)

, хотя даже мигание курсора может все испортить, а у osx есть прозрачные пользовательские интерфейсы, так что довольно неприятно проверять это без тщательной обработки изображения.

...