【问题标题】:How to properly search for and randomly click multiple images with pyautogui?如何使用 pyautogui 正确搜索并随机单击多个图像?
【发布时间】:2022-11-12 02:02:46
【问题描述】:

我最初的 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)

【问题讨论】:

    标签: python random pyautogui


    【解决方案1】:

    根据 pyautogui 的版本,当它找不到图像时,它会引发异常或返回 None。似乎你的版本返回None,所以你需要做的就是在调用定位函数之后,检查它是否没有返回None

    Bank = gui.locateOnScreen('Bank.png')
    if Bank is not None:
        gui.moveTo(randomClick(Bank))
        gui.click()
    

    另请注意,函数只需要定义一次,因此您应该在程序的最开始只定义一次randomClick。然后,您可以随意调用它多次。

    【讨论】:

      【解决方案2】:

      有人可以帮我吗我需要用于多个图像的功能 looc 并且只单击找到的图像 如果我使用 ''' 如果银行不是无: ''' 它破坏了我的功能

      我用 尝试 别的 尝试 别的 经过

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2021-07-11
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多