You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyAutoGUI像素颜色检测脚本异常:像素变白时循环无法终止

问题:循环检测像素变色却无法终止的原因及修复方案

嗨,你遇到的问题其实很典型——变量没有及时更新导致判断逻辑失效!

看你的代码,问题出在这里:你只在循环开始前给变量a赋值了一次初始的像素值,之后在循环里虽然重新截取了屏幕并保存成了新的current.png,但从来没有更新a的取值。也就是说,循环里一直拿着最开始那次的像素值在做判断,哪怕新截图里的像素已经变成白色了,a还是原来的非白色值,自然永远不会触发break终止循环。

修复后的基础版本

只需要在每次重新截图后,重新调用rgb_of_pixel获取最新的像素值并赋值给a即可:

import pyautogui
from PIL import Image
import time

def rgb_of_pixel(img_path, x, y):
    im = Image.open(img_path).convert('RGB')
    r, g, b = im.getpixel((x, y))
    return (r, g, b)

# 初始化截图并获取初始像素值
current = pyautogui.screenshot(region=(949, 502, 10, 5))
current.save("./current.png")
a = rgb_of_pixel("./current.png", 1, 1)
print(a)

while True:
    if a == (255, 255, 255):
        print('It is white!')
        break
    else:
        # 重新截图
        current = pyautogui.screenshot(region=(949, 502, 10, 5))
        current.save("./current.png")
        # 关键:更新a为最新的像素值
        a = rgb_of_pixel("./current.png", 1, 1)
        print(a)
        time.sleep(0.5)

更高效的优化方案

其实你完全不需要每次都把截图保存到本地文件,直接在内存中处理截图对象就行,这样能避免频繁读写文件的开销,运行效率更高也更稳定:

import pyautogui
from PIL import Image
import time

def get_pixel_rgb(screenshot, x, y):
    # 直接对内存中的截图对象转换为RGB并获取像素值
    rgb_screenshot = screenshot.convert('RGB')
    return rgb_screenshot.getpixel((x, y))

while True:
    # 每次循环直接获取屏幕截图的内存对象
    screenshot = pyautogui.screenshot(region=(949, 502, 10, 5))
    pixel_color = get_pixel_rgb(screenshot, 1, 1)
    print(pixel_color)
    
    if pixel_color == (255, 255, 255):
        print('It is white!')
        break
    time.sleep(0.5)

这个版本去掉了文件保存的步骤,逻辑更简洁,也减少了潜在的文件操作问题。

内容的提问来源于stack exchange,提问作者Fetige Pomes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:59:07