我如何等待pyautogui.locateonscreen()返回值?

时间:2017-06-30 02:50:23

标签: python pyautogui

我正在创建一个webbot,我想在继续编写脚本之前等待某个图像显示在网页上。

我正在使用pyautogui.locatesonscreen()函数,但我找不到一种方法来定位对象,直到它出现。

我的脚本似乎只是在它返回值为none之前运行一次locateonscreen函数 - 我希望它保持循环不复制它找到图像。

3 个答案:

答案 0 :(得分:0)

您可以循环播放脚本:

import pyautogui
image = pyautogui.locateOnScreen("image.png")

#Searches for the image
while image == None:
    image = pyautogui.locateOnScreen("image.png")
    print("still haven't found the image")

#When program finds image, print the location
print(image)

答案 1 :(得分:0)

我知道这篇文章已有两年历史了,但是我发现这个问题仍然存在,并且提供的解决方案不适用于pyautogui v0.9.41及更高版本。所以这是我自己的:

import pyautogui


location = None
imageFile = 'image.png'

while (location == None):
    try:
        location = pyautogui.locateOnScreen(imageFile)
    except Exception as e:
        print(e)

print(location)

来自pyautogui.readthedocs.io: 注意:从0.9.41版本开始,如果定位函数找不到所提供的图像,则它们将引发ImageNotFoundException而不是不返回None。

答案 2 :(得分:0)

不知道为什么,但上述解决方案对我不起作用!也许是因为它正在寻找图像的 100% 匹配,所以为了防止这种异常使用置信度参数!你可以在 PyAutoGUI 的文档中看到更多关于它的信息!

import pyautogui
import time
game_over =False
time.sleep(5)
while not game_over:
    try:
        x1, y1=pyautogui.center(pyautogui.locateOnScreen("./pyautogui_img/green_tik.JPG", confidence=0.7)) 
        time.sleep(2)
        pyautogui.moveTo(x1,y1)
        print('Hurray! image found')
        game_over = True
    except:
        print(f'image not found trying again in next 5 seconds. ')
        time.sleep(5)

上面的代码将寻找一个图像,如果没有找到,则在接下来的 5 秒内再试一次,直到没有找到图像,它将继续运行!并且要使用它,请确保您也安装了 opencv 和枕头。