Python 3.x pixelMatchesColor()返回不可能的值,使用限制为10000?
我正在创建一个在网站上画图的程序,使用PyAutoGui移动鼠标、单击并检查屏幕上的一些像素颜色。您可以在画布的左上角看到我的测试。我的程序在很大程度上依赖于pyautogui.pixelMatchesColor()函数,在某些情况下,我的程序似乎崩溃了。在试图找到导致相同问题的最小代码集后,我得出以下结论:Python 3.x pixelMatchesColor()返回不可能的值,使用限制为10000?,python-3.x,pyautogui,Python 3.x,Pyautogui,我正在创建一个在网站上画图的程序,使用PyAutoGui移动鼠标、单击并检查屏幕上的一些像素颜色。您可以在画布的左上角看到我的测试。我的程序在很大程度上依赖于pyautogui.pixelMatchesColor()函数,在某些情况下,我的程序似乎崩溃了。在试图找到导致相同问题的最小代码集后,我得出以下结论: import pyautogui no = 0 while True: if pyautogui.pixelMatchesColor(1750, 180, (255, 255, -
import pyautogui
no = 0
while True:
if pyautogui.pixelMatchesColor(1750, 180, (255, 255, -1)):
break
num += 1
print(num)
正如您可能已经猜到的,输出:
10000
这里的问题是,一旦您在一次运行中使用该函数超过10000次,它将停止工作,只返回:
(255, 255, -1)
我四处查看了一下,但是在pyautogui.pixelMatchesColor()函数的使用限制为10000的地方找不到任何东西(顺便说一句,这个限制也适用于pyautogui.pixel()函数)。它破坏了我的程序,所以如果你有任何信息,或者有什么方法可以绕过这个问题,请让我知道。谢谢大家!
编辑:查看pyautogui代码后,发现它使用ctypes作为鼠标控件,使用PIL作为屏幕实用程序。我将尝试使用它们而不是pyautogui来获得更直接的代码,看看它是否有什么不同。对于遇到此错误的其他人,我找到了一个解决方法。不要调用pyautogui的
pixel(x,y)
函数(它只是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().getpixel()调用的屏幕截图,我在x分钟后取消了,但它似乎没有限制
测试日期:
- Python 3.6.3
- 枕头6.0.0(PIL)
- PyAutoGUI 0.9.42
这可能会让您深入了解此错误。我运行,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))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
grab().getpixel((140,20))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
grab().getpixel((140,20))
文件“C:\Users\xisnown\AppData\Local\Programs\Python\Python36-32\lib\site packages\PIL\ImageGrab.py”,grab中第41行
大小,数据=抓取器()
操作错误:屏幕抓取失败