我正在创建一个webbot,我想在继续编写脚本之前等待某个图像显示在网页上。
我正在使用pyautogui.locatesonscreen()函数,但我找不到一种方法来定位对象,直到它出现。
我的脚本似乎只是在它返回值为none之前运行一次locateonscreen函数 - 我希望它保持循环不复制它找到图像。
答案 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 和枕头。