

一、背景需求
马上开学,我们使用的幼儿打卡系统闵豆家园发布信息更新通知——把数据发给他们,进行大班归档、小中班升班、托小班建班、托小班幼儿信息导入的批量操作。


根据以往经验,
1.托小班新生幼儿信息导入
提供的是批量导入托小幼儿信息的服务,但是要使用他们提供的一套幼儿数据Excel导入模版,里面有一定的输入格式限制,制作这个模版就要费时间。
2.教师转园需要自行修改
不提供教师转园区的操作,还是要我自己根据人事名单来转。(安全隐私)
3.拆班幼儿数据无法分流
另外拆班的托1、托2、中6班的孩子就默认删除了,不可能精细化地帮我们把已有的名字,分到各个小班、大班
4.等待时间长
而且由于他们服务的单位很多,要排队等操作。不可能马上给我们学校操作。
综上所述,
这几年我都是自行更新,主要用uibot或Python进行归档、升班、托小班信息导入。教师转院等设置。

二、操作流程
由于少子化,幼儿人数锐减,班级数量锐减,教师人数也减少(教师退休,保育员辞职)因此这次我是“手动70%”+“Python30%”的比例进行“闵豆家园”班级和人员更新
(一)班级栏目更新(手机版闵豆家园)
这里手动,班级少(23个班级变19个班级),再花时间写代码不划算,还不如就手改
手机闵豆家园的班级栏目设置的操作手册
主要任务:大班归档、中小托升班改班级名字、新建小班托班栏目
'''
管理员账户登录手机
1、大班归档
切换园区-总园
班级管理-右上角三个点-班级信息-拉倒最下面大班-长按大1班-归档-确认-提交-归档后不可更改 确认归档吗(确认)-归档成功
班级管理-右上角三个点-班级信息-拉倒最下面大班-长按大2班-归档-确认-提交-归档后不可更改 确认归档吗(确认)-归档成功
六个大班全部方法归档
效果:班级管理只剩下中班
2、中班升班大班
班级管理-右上角三个点-右上角全选-底部 批量升班-升班成功
效果,页面上还是显示中班,但实际年级已经变更为大班
更改班级名称
班级管理-右上角三个点-班级信息-中一班(下面小字已经是大一班)长按 中1班-右上角编辑-修改-中改成大-确定-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
班级管理-右上角三个点-班级信息-中二班(下面小字已经是大二班)长按 中1班-右上角编辑-修改-中改成大-确定-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
六个中班全部方法改成大班
3、一分园小班 升班为中班
回到主页面,-切换园区-一分园
班级管理,里面有托班和小班
1.班级管理-右上角三个点-升班-全选-确认升级四个班级-升班成功
2.班级管理-三个点-班级信息-长按托1班-右上角编辑-修改-托 改成 小(由于托班都是拆班的,里面部分孩子会转入新的班级,所以文件名改成小1班拆班,不要和新建的小一班重名)-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
班级管理-三个点-班级信息-长按托2班-右上角编辑-修改-托 改成 小(由于托班都是拆班的,里面部分孩子会转入新的班级,所以文件名改成小2班拆班,不要和新建的小一班重名)-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
.班级管理-三个点-班级信息-长按小1班-右上角编辑-修改-小 改成 中-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
.班级管理-三个点-班级信息-长按小2班-右上角编辑-修改-小 改成 中-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
3.把中1中2转入总园
班级管理-右上角三个点-班级转院-选中中1班-选总园按钮-设置班级名称-班级和25为幼儿转院成功-此时中1班没有了,只有中2班
班级管理-右上角三个点-班级转院-选中中2班-选总园按钮-设置班级名称(换成中班二班)-班级和25为幼儿转院成功-此时中班没有了
4、二分园小班,升为中班,转入总园
返回主页面-切换园区-二分园
班级管理-三个点-升班-全选-确认升级四个班级-升班成功
.班级管理-三个点-班级信息-长按小3班-右上角编辑-修改-小 改成 中-确定-班级信息修改成功-(千万不要点底部的归档)左上角箭头返回
同样方法修改另外三个小班变成中班
中3-中6转入总园
班级管理-右上角三个点-班级转院-选中中3班-选总园按钮-设置班级名称(改成中班三班)-班级和25为幼儿转院成功-此时中3班没有了,只有另外3个中班
同样方法转另外三个中班
5、一分园新的小班4、5,二分园新小班123,所以我把小1-5都放在二分园,(为了把原来托1托2班孩子转入新的小班)
二分园主页面-班级管理-右上角三个点=创建班级=选择班级-选择老师(因为老师还没有转院区,所以暂时不绑定)-完成-创建班级成功
同样方式做五个班级的班级管理。
6、切入一分园,新建托班 一分园新托1托2,二分园新托3,统一放在一分园里制作。
返回二分园主页面,切换园区-一分园
班级管理-右上角三个点-创建班级-托班-托1班
同理制作托1 托2 托3
框架搭建完成。
由于托班是新的,名单也是新的,可以先把托班导入
'''
班级名称都更新正确。一共19个班级,总部都是中大班,一分园暂时是3个托班、二分园暂时5个全部小班“空班无人”+2个“小班拆分”。
(二)托小幼儿建档(网页闵豆家园)
Python读取“班级信息表”内托班、小班信息。写入



改的又快又好

但是名单是托1班,网页上要求托一班





1.获取网页各个项目的坐标

import pyautogui
import time
import pygetwindow as gw
# 1. 找到VSCode窗口(匹配标题含 Visual Studio Code)
vscode_wins = gw.getWindowsWithTitle("Visual Studio Code")
if not vscode_wins:
print("未找到VSCode窗口,请先打开VSCode再运行!")
else:
win = vscode_wins[0]
# 自动最小化VSCode
win.minimize()
print("VSCode已自动最小化,你有5秒时间移动鼠标到目标位置")
time.sleep(5) # 等待5秒给你放鼠标
# 获取当前鼠标坐标并打印
x, y = pyautogui.position()
# print(f"\n已捕获鼠标坐标:X = {x} , Y = {y}")
print(f"\n已捕获鼠标坐标:{x},{y}")
# 934,354
# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")

2.新建托班幼儿名单的程序

(1)打开校园管理-班级管理页面,自动输入班级名称“托一班”筛选,

(2)就只有一条“托一班”,选择“学生管理”

(3)一个学生也没有,所以添加学生

(4)依次添加姓名、选择性别(等于男,点左边的坐标,等于女,点右边的坐标)、添加学号


(5)确定后返回主页-班级管理


就这样循环输入“班级-筛选-学生管理-添加学生-姓名-性别-学号-确定-班级管理”
'''
孩子通-3个托班新幼儿上传
孩子通新版地址:https://passport.haizitong.com/home/login?appid=118&return_url=https%3A%2F%2Fyun.haizitong.com%2Fhome%2Fsso
管理员账号:0211XXXXX 22XXXX
谷歌浏览器,必须100%
页面放在家园互动-校园管理-班级管理-
为防止孩子通变慢,一个班级一个班级上传。完成后关闭园园通,再次开启
豆包,阿夏
20260821
'''
import openpyxl
import pyautogui
import time
import pyperclip
import pygetwindow as gw
# 1. 找到VSCode窗口(匹配标题含 Visual Studio Code)
vscode_wins = gw.getWindowsWithTitle("Visual Studio Code")
if not vscode_wins:
print("未找到VSCode窗口,请先打开VSCode再运行!")
else:
win = vscode_wins[0]
# 自动最小化VSCode
win.minimize()
print("VSCode已自动最小化,你有5秒时间移动鼠标到目标位置")
time.sleep(5) # 等待5秒给你放鼠标
import random
# 随机休眠:1~3秒,带小数,模拟真人操作
def rand_sleep():
t = random.uniform(2, 3)
time.sleep(t)
from openpyxl import load_workbook
def num_to_chinese(s):
"""把字符串里阿拉伯数字转为中文 1→一,2→二 ...9→九"""
digit_map = {"1":"一","2":"二","3":"三","4":"四","5":"五",
"6":"六","7":"七","8":"八","9":"九"}
for k,v in digit_map.items():
s = s.replace(k, v)
return s
file_path = r"D:\Python最终内容\20260902孩子通新生信息上传\20260805班级信息表.xlsx"
wb = load_workbook(file_path)
for sheet_name in wb.sheetnames:
if sheet_name.startswith("托"):
print(f"====正在读取工作表:{sheet_name}====")
ws = wb[sheet_name]
for row in ws.iter_rows(min_row=2, values_only=True):
student_id = row[0] # A列:学号
park = row[1] # B列:园区
class_name = row[2] # C列:班级
name = row[3] # D列:姓名
gender = row[4] # E列:性别
if not name:
continue
# 转换班级名称:托1班 → 托一班
new_class_name = num_to_chinese(class_name)
print(student_id, park, new_class_name, name, gender)
# 点击班级,
pyautogui.click(995,333)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(new_class_name)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# “筛选”按钮
pyautogui.click(1408,327)
rand_sleep() # 延迟2秒切换窗口
# 点击“学生管理”
pyautogui.click(1804,512)
time.sleep(3) # 切换页面时间长一点
# ”添加学生“按钮
pyautogui.click(1556,385)
rand_sleep() # 延迟2秒切换窗口
# 学生姓名
pyautogui.click(879,297)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(name)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# 性别
if gender=='男':
pyautogui.click(864,365)
rand_sleep()
else:
pyautogui.click(923,365)
rand_sleep()
# 学号
pyautogui.click(866,480)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(student_id)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# 确认,回到最初的界面
pyautogui.click(1255,967)
time.sleep(3) # 保存时间长一点
# 左侧班级管理
pyautogui.click(143,846)
rand_sleep() # 保存时间长一点
# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")
大约59个孩子用了25分钟
因为我怕来来不及按或者网页卡顿,每次点击的间隔秒数都是2-3秒,最后也的确没有出现问题。顺利把幼儿信息都建档了。

(三)小班幼儿建档(网页闵豆家园)
转入二分园,把5个小班按同样方法建档,代码里把“托”改成“小”

'''
孩子通-5个小班新幼儿上传
孩子通新版地址:https://passport.haizitong.com/home/login?appid=118&return_url=https%3A%2F%2Fyun.haizitong.com%2Fhome%2Fsso
管理员账号:0211XXXXX 22XXXX
谷歌浏览器,必须100%
页面放在家园互动-校园管理-班级管理-
为防止孩子通变慢,一个班级一个班级上传。完成后关闭园园通,再次开启
豆包,阿夏
20260821
'''
import openpyxl
import pyautogui
import time
import pyperclip
import pygetwindow as gw
# 1. 找到VSCode窗口(匹配标题含 Visual Studio Code)
vscode_wins = gw.getWindowsWithTitle("Visual Studio Code")
if not vscode_wins:
print("未找到VSCode窗口,请先打开VSCode再运行!")
else:
win = vscode_wins[0]
# 自动最小化VSCode
win.minimize()
print("VSCode已自动最小化,你有5秒时间移动鼠标到目标位置")
time.sleep(5) # 等待5秒给你放鼠标
import random
# 随机休眠:1~3秒,带小数,模拟真人操作
def rand_sleep():
t = random.uniform(2, 3)
time.sleep(t)
from openpyxl import load_workbook
def num_to_chinese(s):
"""把字符串里阿拉伯数字转为中文 1→一,2→二 ...9→九"""
digit_map = {"1":"一","2":"二","3":"三","4":"四","5":"五",
"6":"六","7":"七","8":"八","9":"九"}
for k,v in digit_map.items():
s = s.replace(k, v)
return s
file_path = r"D:\Python最终内容\20260902孩子通新生信息上传\20260805班级信息表.xlsx"
wb = load_workbook(file_path)
for sheet_name in wb.sheetnames:
if sheet_name.startswith("小"):
print(f"====正在读取工作表:{sheet_name}====")
ws = wb[sheet_name]
for row in ws.iter_rows(min_row=2, values_only=True):
student_id = row[0] # A列:学号
park = row[1] # B列:园区
class_name = row[2] # C列:班级
name = row[3] # D列:姓名
gender = row[4] # E列:性别
if not name:
continue
# 转换班级名称:托1班 → 托一班
new_class_name = num_to_chinese(class_name)
print(student_id, park, new_class_name, name, gender)
# 点击班级,
pyautogui.click(995,333)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(new_class_name)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# “筛选”按钮
pyautogui.click(1408,327)
rand_sleep() # 延迟2秒切换窗口
# 点击“学生管理”
pyautogui.click(1804,512)
time.sleep(3) # 切换页面时间长一点
# ”添加学生“按钮
pyautogui.click(1556,385)
rand_sleep() # 延迟2秒切换窗口
# 学生姓名
pyautogui.click(879,297)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(name)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# 性别
if gender=='男':
pyautogui.click(864,365)
rand_sleep()
else:
pyautogui.click(923,365)
rand_sleep()
# 学号
pyautogui.click(866,480)
# 1. 复制指定文字到剪贴板
# print('写入姓名:',name)
pyperclip.copy(student_id)
# 2. 模拟Ctrl+V粘贴
pyautogui.hotkey("ctrl", "v")
rand_sleep() # 延迟2秒切换窗口
# 确认,回到最初的界面
pyautogui.click(1255,967)
time.sleep(3) # 保存时间长一点
# 左侧班级管理
pyautogui.click(143,846)
rand_sleep() # 保存时间长一点
# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")
大约125位小班孩子 用时53分钟,速度和质量都很稳定,这个网页也没有出现卡顿延迟的问题。


(四)教师转院(手机操作)
以前是用过手动把所有教师从分园转回总园,再从总园转到分园,还用uibot把教师们的昵称改成全名,再写代码测算位置。进行分班。
如今孩子少了,班级少了,老师也少了(陆续退休,不招新人)所以我还是手动操作,对着名单,用手机把教师一一转到总园,再分配到分园。岗位配正确后,再给教师和保育员添加班级。
"''
手机版
1.把二分园的教师班主任转到总园(默认教师)。保育员转入总园(选择保育员)两位营养员也转入总园(选择后勤老师)。只有副院长和保健老师保留
2把一分园托班教师4人+保育员2人保留,小班教师4(默认教师)+保育2(选择保育员)转入总园,1位营养员(默认后勤老师)转入总园
3.现在所有的老师都在总院了,先根据一分园名单,点击教师名字,把教师转入一分园(默认教师)、保育员转入一分园(选择保育员),后勤老师转入一分园(选择后勤老师)。然后同样方式把二分园的老师、保育员、后倾老师都做了。
4.为总园,每个老师、保育员分配班级,打开教师名字,右上角点开详细信息,最下面就是所在班级。
4.为一分园,每个老师、保育员分配班级,打开教师名字,右上角点开详细信息,最下面就是所在班级。
4.为二分园,每个老师、保育员分配班级,打开教师名字,右上角点开详细信息,最下面就是所在班级。(分配班级)
5.总园部分老师保育员转入机动岗位,需要把这个人先转到一分园(默认老师即可),再打开一分园界面,选中教师名字,再转回总园,选择“行政岗位”。
6.删除已经退休、调离的名单
7.确保每个园区的岗位人数与名单人数一致,如总园,园长1人、教师人数22,保育员11人,保健2,后勤(营养员)2,管理人员(行政5+教辅3+机动人员5)
'''
(五)分流班孩子的处理
原2025年9月中6班的全部孩子,会分散转入到2026年9月的5个大班中。(有名单)

原来2025年9月托1托2班的部分孩子,会分散转入到2026年9月的5个小班中。
(因为托班不是直接升入小班,而是重新按照小班新生入园的方式,幼儿全部打乱)
没有分流名单,但是我觉得如果直接删除有点可惜,还是想尽量把已注册的幼儿从托班转入到新的小班里。
操作方法:
检索孩子的姓名,匹配“新的班级信息表”,观看转入新的班级的名称,调整新的学号
(1)拆分班级幼儿学号修改+转入对应班级
孩子通网页版-班级管理打开“小一班拆班”,复制第一个名字,到收集的“班级信息表”里,工作簿检索这个名字。




如果存在,就会在小1-小5的工作表内。了解这个孩子新的班级是小4班,他的新学号是多少(1号)
在网页里,这个孩子的名字下方“修改学生”-修改新班级里的学号

学号改成1号-确定

然后选择“转班”


同样方式把整个拆分班级的孩子都全部转完后,会遗留部分孩子在“班级信息表”里没有匹配。


说明该幼儿并不在本园上小班,而是去了其他幼儿园。
这个孩子账号直接删除。

拆分班级里面人数为0,才能删除班级,否则就没有这个按钮,这一点“孩子通(闵豆家园)”做的很严谨

同样方式制作托一班拆分、托二班拆分、再根据分流名单,把中6班(已经改成大六班)分到各个大班
(2)转入班级要检查,去掉重复
已存在托班账号幼儿升入小班,转入新的小班班级后,要进行检查。去掉重复的空档案。
因为前面Python按照Excel自动重复录入了名单,所以现在一个孩子会有两个同样的学号。
观察两个相同名字的档案,保留有“手机号”的一行数据(这是去年托班时,家长使用的卡片)今年继续到小班用。因此,要把没有数据(空行)的一个表格删除,

同理拆分“小二班拆分到其他小班”“大6班拆分到其他大班”。
中6班(大六班)转入其他大班后,虽然不太会出现姓名重复,但是这些孩子通常插入到“已经转走”的孩子的学号里,所以会出现两个孩子都是30号的情况。
此时管理员可以把另一个30学号(转走幼儿的)删除,也可以通知班主任手动删除(更保险,以免删错。)
