我最初的python课程之一通过在特定坐标使用pyautogui.click
来自动执行简单的cookie点击游戏。我试图通过使用locateonscreen
图像函数和random
模块来定位图像,然后在图像中随机单击,因为我认为这对我的学习更实用,更像人类。
当图像被找到-一切工作。当没有找到图像时-我得到一个AttributeError: 'NoneType' object has no attribute 'left'
,因为在这种情况下我的盒子不存在。我正在寻找帮助编程的逻辑,试图找到和想象,如果它发现它随机点击它,否则尝试找到下一个图像。
这是我的工作,当图像存在:while坐标是单击静态位置,然后在计数器到达某一点后查找并随机单击图像。然后返回到静态位置继续点击和循环。
import pyautogui as gui
import random
gui.PAUSE = 0.01
gui.moveTo(x=383,y=576)
counter = 1
while gui.position() == (383,576):
gui.click()
counter += 1
if counter % 300 == 0:
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Bank = gui.locateOnScreen('Bank.png')
gui.moveTo(randomClick(Bank))
gui.click()
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Factory = gui.locateOnScreen('Factory.png')
gui.moveTo(randomClick(Factory))
gui.click()
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Mine = gui.locateOnScreen('Mine.png')
gui.moveTo(randomClick(Mine))
gui.click()
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Farm = gui.locateOnScreen('Farm.png')
gui.moveTo(randomClick(Farm))
gui.click()
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Grandma = gui.locateOnScreen('Grandma.png')
gui.moveTo(randomClick(Grandma))
gui.click()
def randomClick(box):
x_click = int(random.uniform(box.left, box.left+box.width))
y_click = int(random.uniform(box.top, box.top+box.height))
return (x_click, y_click)
Cursor = gui.locateOnScreen('Cursor.png')
gui.moveTo(randomClick(Cursor))
gui.click()
gui.moveTo(x=383,y=576)
根据pyautogui的版本,当它找不到图像时,它将引发异常或返回None
。似乎你的版本返回None
,所以你所需要做的就是调用locate函数后,只需检查它是否没有返回None
。
Bank = gui.locateOnScreen('Bank.png')
if Bank is not None:
gui.moveTo(randomClick(Bank))
gui.click()
还需要注意函数只需要定义一次,因此您应该在程序的最开始只定义一次randomClick
。然后你可以任意调用它。