pyautogui问题:locateCenterOnScreen找不到正确的位置

时间:2020-02-19 00:40:38

标签: pyautogui

我正在尝试编写一个简单的工作自动化程序, 使用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')

1 个答案:

答案 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