单击像素后,如何中断循环并重新获取屏幕截图?

时间:2020-08-24 02:54:10

标签: python pyautogui

我正在尝试单击某个特定颜色的像素,当它出现在定义的屏幕截图中时,然后重新获取屏幕快照并扫描更多特定颜色的像素,并在找到一个像素后单击一个,依此类推。我认为我的代码正在截屏,然后扫描像素的颜色,一旦找到颜色就单击它,但它没有重新截取屏幕截图,而是继续扫描该屏幕快照以查找具有匹配颜色的更多像素然后点击它们。如何找到找到并单击的像素,然后中断for循环扫描像素,然后重新开始抓屏过程?我的代码在下面,谢谢!

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con

time.sleep(2)

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

#Color of enemy: (254, 118, 136)

while keyboard.is_pressed('q') == False:

    range1 = 250
    range2 = 258
    range3 = 114
    range4 = 125
    range5 = 122
    range6 = 148
    
    pic = pyautogui.screenshot()
    width, height = pic.size
    pic = pyautogui.screenshot(region=(((0.5*width)-100),(0.5*height-100),200,200))
    width, height = pic.size
    
    for x in range(0,width,1):
        for y in range(0,height,1):

            r,g,b = pic.getpixel((x,y))

            if (((r in range(range1,range2))and(g in range(range3,range4)))):
                #and(b in range(range5,range6)))):
                moveTo(x+width,y+height)
                click(x+width,y+height)
                time.sleep(0.1)
                break

1 个答案:

答案 0 :(得分:0)

不是一个完整的答案,但您的问题是中断只是退出y的第一个循环,而不是退出x的一个循环。一种解决方法是为循环创建一个函数并退出该函数