我正在尝试编写一个简单的工作自动化程序, 使用locateCenterOnscreen代码以查找要单击的位置, 做一些简单的单击和复制粘贴作业,然后重复这些作业很多次。
这样做时,我遇到了以下问题:
它有时会正常工作, 但是有时locateCenterOnScreen代码会找到错误的位置。 如果我重新启动并清除输出然后再试一次,有时它又可以正常工作了, 但有时它仍然会找到错误的位置。
它仍然可以找到某个位置,因此程序可以正常运行。 但这是完全错误的位置,在该位置上没有任何图像,因此我认为这不是图像问题。
我正在使用双显示器,这可能是个问题吗? 如果是这样,该怎么办才能解决此问题?
我正在使用Jupyter Notebook,这是我的代码。
import time
import pyautogui as p
def alttab():
p.keyDown('alt');p.press('tab');p.keyUp('alt')
sku_code = p.locateCenterOnScreen("sku_code.png")
bd_code = p.locateCenterOnScreen("mag.png")
add_to_list = p.locateCenterOnScreen("add_to_list.png")
alttab()
for i in range(10):
p.hotkey('ctrl', 'c')
p.moveTo(bd_code);p.moveRel(-30,);p.click()
p.hotkey('ctrl', 'v');p.press('enter')
time.sleep(2)
alttab()
p.press('right');p.press('right');p.hotkey('ctrl', 'c')
p.click(sku_code)
p.hotkey('ctrl', 'a');p.press('delete');p.hotkey('ctrl', 'v');p.press('enter')
time.sleep(2)
alttab()
p.press('right');p.hotkey('ctrl', 'c')
p.moveTo(add_to_list)
p.moveRel(7, 45);p.click()
p.hotkey('ctrl', 'v')
p.click(add_to_list)
time.sleep(2)
error = p.locateCenterOnScreen("error.png")
# if everything goes fine to this point, it doesn't generate any pop-up,
# but if something goes wrong, it would generate a pop-up with "error.png" image.
if error != None:
p.press('enter')
alttab()
p.press('right');p.press('f2');p.typewrite("error");p.press('enter')
p.press('left');p.press('left');p.press('left');p.press('left')
else:
p.press('enter')
alttab()
p.press('right');p.press('f2');p.typewrite("success");p.press('enter')
p.press('left');p.press('left');p.press('left');p.press('left')
答案 0 :(得分:0)
嘿,我相信我对您的问题有一个答案:
您可以使用更清晰的图像而没有多余的杂讯
这可能会导致您的问题
也代替使用
sku_code = p.locateCenterOnScreen("sku_code.png")
尝试使用置信度值
sku_code = p.locateCenterOnScreen("sku_code.png", confidence=o.9)
只需确保已安装openCV
如果给出错误,请在for while循环中使用try try块
然后遍历
def iterate(number_of_iterations, interval)
counter = 0
while counter <= number_of_iterations:
time.sleep(float(interval))
try:
x,y = p.locateCenterOnScreen("sku_code.png", confidence=o.9)
p.click(x, y)
break
except TypeError:
pass
counter += 1