You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyautogui的locateOnScreen方法中指定多个搜索区域?

问题解答

一、pyautogui指定多个搜索区域的实现方法

pyautogui的locateOnScreen原生不支持同时传入多个region参数,你重复传参的写法不符合Python语法规则,所以会触发SyntaxError: keyword argument repeated: region报错。
正确的实现逻辑是:提前定义所有需要搜索的区域列表/字典,循环遍历每个区域,逐个调用locateOnScreen搜索即可。

二、你当前代码报错的原因

你遇到的文件读取报错和循环传递region参数没有关系,是两个代码错误导致的:

  1. 遍历字典逻辑错误:你写的for region in regions遍历的是字典的键,也就是"region 1"、"region 2"这类字符串,而非你想要的坐标元组。把字符串传给region参数后,参数类型不匹配,触发了底层的读取异常。
  2. 变量命名冲突:你全局定义了变量l存储图片路径,但函数名也叫l,函数内部还重复定义了变量l,触发了Python的变量遮蔽规则,导致读取图片时实际拿到的路径不对,才会出现找不到l.jpg的报错。

三、修正后的参考代码

import pyautogui as py

# 提前定义图片路径,不要用单字母这种易冲突的变量名
levelup_img_path = r"C:\Users\x\OneDrive\froggy-pirate-master\avoidShips\eventfarm\l.jpg"
# 定义搜索区域,直接用列表存元组更简洁
search_regions = [
    (476, 268, 736, 320),
    (1328, 268, 1591, 320),
    (276, 745, 564, 806),
    (1130, 745, 1422, 803)
]

def check_levelup():
    for region in search_regions:
        # 逐个区域搜索
        locate_res = py.locateOnScreen(levelup_img_path, confidence=0.90, region=region)
        if locate_res is not None:
            py.click(locate_res)
            # 找到后可以直接break结束循环,不需要继续搜剩下的区域
            break

内容的提问来源于stack exchange,提问作者user9686961

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:09:02