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

Python使用pyautogui编写复选框点击脚本时,while循环报错TypeError: 'NoneType' object is not subscriptable及循环退出问题

解决PyAutoGUI点击复选框后退出循环的TypeError问题

嘿,我来帮你搞定这个问题!你遇到的TypeError: 'NoneType' object is not subscriptable其实是个很常见的逻辑顺序问题,咱们一步步拆解:

为啥会报错?

当所有复选框都被点完之后,pyautogui.locateOnScreen("checkbox.png")找不到目标图片了,会返回None。但你现在的代码是直接把这个返回值传给pyautogui.center()——而center()函数需要的是一个包含坐标的元组(比如(x, y, width, height)),对着None做下标操作肯定会炸呀!

而且你的退出判断if x1 == None: break放在了点击操作之后,这时候错误已经发生了,根本没机会走到判断步骤就崩溃了。

怎么修复?

核心就是先检查有没有找到目标,再执行后续的点击操作,具体改法如下:

修改后的完整代码

import pyautogui
import PIL

pyautogui.sleep(2)
while True:
    # 第一步:先定位复选框,不要直接取中心点
    checkbox_position = pyautogui.locateOnScreen(
        "checkbox.png", 
        region=(50, 50, 1000, 1000), 
        confidence=0.9
    )
    
    # 第二步:判断是否找到目标,找不到就退出循环
    if checkbox_position is None:
        break
    
    # 第三步:找到目标后再取中心点,执行点击
    x1 = pyautogui.center(checkbox_position)
    pyautogui.moveTo(x1)
    pyautogui.click()
    
    # 这里的sftp变量你没用到,要是不需要可以删掉哦
    sftp = pyautogui.locateOnScreen("sftp.png", region=(750, 450, 500, 500), confidence=0.7)
    pyautogui.sleep(0.5)
    print(x1)

print("work is done")

几个小建议

  • 用is None代替== None来判断空值,这是Python社区的最佳实践,逻辑更严谨
  • 代码里的sftp变量定义后没使用,要是没后续逻辑可以删掉,减少冗余
  • 如果你的PyAutoGUI版本支持,可以给locateOnScreen加个timeout参数,避免程序一直无意义地等待

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:42:48