PyAutoGui.pixelMatchesColor () возвращает невозможное значение с пределом использования 10000? - PullRequest
0 голосов
/ 20 мая 2018

Я создаю программу для рисования изображений на этом сайте, используя PyAutoGui для перемещения мыши, щелчка мышью и проверки некоторых цветов пикселей на экране.Вы можете увидеть мои тесты в левом верхнем углу холста.Моя программа в значительной степени зависит от функции pyautogui.pixelMatchesColor (), и в определенные моменты моя программа, казалось, ломалась.После попытки найти наименьший набор кода, который привел бы к той же самой проблеме, я получил следующее:

import pyautogui
no = 0
while True:
    if pyautogui.pixelMatchesColor(1750, 180, (255, 255, -1)):
        break
    num += 1
print(num)

Это, как вы уже догадались, вывел:

10000

проблема здесь в том, что после того, как вы использовали функцию более 10 000 раз за один прогон, она перестает работать и возвращает только:

(255, 255, -1)

Я посмотрел вокруг, но нигде не могу найти что-либо по ограничению использования10 000 для функции pyautogui.pixelMatchesColor () (кстати, этот предел также применяется к функции pyautogui.pixel ()).Это сломало мою программу, поэтому, если у вас есть какая-либо информация или способ обойти эту проблему, пожалуйста, дайте мне знать.Спасибо!

РЕДАКТИРОВАТЬ: После изучения кода pyautogui выясняется, что он использует ctypes для управления мышью и PIL для экранных утилит.Я попытаюсь использовать их вместо pyautogui для более прямого кода, чтобы увидеть, если он имеет значение.

Ответы [ 2 ]

0 голосов
/ 21 июля 2019

Это может дать представление об этой ошибке.Я бегал, pyautogui.pixel(), пока не сломалосьЗатем я попробовал обходной путь, предложенный viddle ...

from PIL import ImageGrab

pixelRGB = ImageGrab.grab().getpixel((100, 125))

, который вызвал следующее исключение

Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
ImageGrab.grab().getpixel((140,20))

Traceback (последний вызов был последним): File "", строка1, в ImageGrab.grab (). Getpixel ((140,20)) Файл "C: \ Users \ XisUnknown \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ PIL \ ImageGrab.py"строка 41, размер захвата, data = grabber () OSError: сбой захвата экрана

0 голосов
/ 19 мая 2019

Для всех, кто сталкивался с этой ошибкой, я нашел обходной путь.Вместо вызова функции pixel(x, y) pyautogui (которая является просто оберткой для функций ImageGrab), вызовите ImageGrab.grab().getpixel((x, y)) напрямую.Ограничение 10.000 ТОЛЬКО для функции pyautogui.pixel(x, y).Я действительно не знаю, почему ...

from PIL import ImageGrab

pixelRGB = ImageGrab.grab().getpixel((x, y))

Вот скриншот моих тестов с ImageGrab.grab() против pyautogui.pixel() (я звонил ImageGrab.grab() в два раза чаще, чем pyautogui.pixel())

ImageGrab.grab() сбой после примерно 10 тысяч попыток pyautogui.pixel()

А вот снимок экрана ТОЛЬКО ImageGrab.grab().getpixel() звонков, я отменил через x минут, но это неКажется, нет предела.

ImageGrab.grab() без pyautogui.pixel() вызовов между

Проверено на:

  • Python 3.6.3
  • Подушка6.0.0 (PIL)
  • PyAutoGUI 0.9.42
...