Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x pixelMatchesColor()返回不可能的值,使用限制为10000?_Python 3.x_Pyautogui - Fatal编程技术网

Python 3.x pixelMatchesColor()返回不可能的值,使用限制为10000?

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, -

我正在创建一个在网站上画图的程序,使用PyAutoGui移动鼠标、单击并检查屏幕上的一些像素颜色。您可以在画布的左上角看到我的测试。我的程序在很大程度上依赖于pyautogui.pixelMatchesColor()函数,在某些情况下,我的程序似乎崩溃了。在试图找到导致相同问题的最小代码集后,我得出以下结论:

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行 大小,数据=抓取器() 操作错误:屏幕抓取失败