当前位置: 首页 > news >正文

【办公类110-01】20250813 园园通新生分班(python+uibot)

背景需求

8月13日就接到通知,园园通的新生导入了,需要分班(前几年都是20号才导入,23日才分班)

前期操作

1.转园区:分院班级转院到总园(如二分院小3-小6,整班转园区到总园,只能一个一个班级转,转后二分院为空,如一分院托1托2消失了,中1班整班转园区总园,只能一个一个班级转,转后一分院为空.在总园里面把所有班级升班,改成中1-6、大1-6

2,新建托小班,今年托班、小班的班级少(孩子越来越少了),就手动建。二分院建立小3-小6,一分院建立托 1-2,小1-2

因为园园通不允许幼儿园自己添加幼儿信息,虽然能把幼儿已有数据下载后,再匹配添加信息,但是无法批量上传。

所以前几年都是用uibot模拟人工操作,打开一个个孩子的词条,逐一编辑,

1.分班,选择显示的班级(不是按顺序排列的)

2.信息1:统一写法(无论籍贯和出生地,都写上海)

就读方式都选日托、户口性质都选非农、籍贯都选上海、健康状况选健康或良好、农业户口类型选城市、出生地上海、港澳台侨外选非港澳台侨

3、信息2:以下全部点“否”(独生子女、低保也全部选否,后续有需求再修改)

军烈子女、优抚子女、随迁子女、孤儿、残疾幼儿、独生子女、部队子女,低保,寄宿生),

4、人户一致(今年只有托班没有选择,两个点都是空,导致无法保存。,其他年龄段无论正确都至少选了一个)

部分外省户籍地址不全,红色框,咨询班主任才补全

感悟:UIBOT时间很长,但是减轻人工操作的繁琐和错误率。(不过还是需要人工监控,因为有时候网页卡顿,UIBOT会报错停止或者持续性无效执行)

今年我想试试python模拟点击鼠标来分班

因为有师生个人信息,图片就不放了,只有代码,自己用

一、先用vlookup把园园通已经有的孩子名单与学校自己统计的点名单进行匹配,确定null所属的班级

筛选总园“中班、大班”插班生的分班

# 
# 总园中大班插班生的分班(python模拟点击 火狐100%页面
# 20250814from openpyxl import load_workbook
import os,time
import pyautogui
import pyperclip
import re
import win32api
import win32con
import sys
import ctypes# 文件路径
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\信息不全幼儿'
file_path = path + r"\上海市闵行区XX幼儿园.xlsx"try:# 加载工作簿wb = load_workbook(filename=file_path, read_only=False)# 获取第一个工作表sheet = wb.worksheets[0]# 创建两个空列表分别存储D列和J列内容name = []classroom = []# 遍历所有行for row in sheet.iter_rows(values_only=True):# 检查J列(索引9)是否包含"中"或"大"if row[9] and ("中" in str(row[9]) or "大" in str(row[9])):# 将D列内容添加到namename.append(row[3])# 将J列内容添加到classroomclassroom.append(row[9])# 打印两个列表print("D列内容列表:")print(name)print("\nJ列内容列表:")print(classroom)except FileNotFoundError:print(f"错误:文件 {file_path} 未找到")
except Exception as e:print(f"发生错误: {str(e)}")
finally:# 确保关闭工作簿if 'wb' in locals():wb.close()# # 进入园园通页面num=7
def minimize_active_window():try:if sys.platform == 'win32':# 获取当前活动窗口的句柄hwnd = ctypes.windll.user32.GetForegroundWindow()# 最小化窗口ctypes.windll.user32.ShowWindow(hwnd, 6)  # 6 对应 SW_MINIMIZEreturn Trueelse:print("此功能仅支持Windows系统")return Falseexcept Exception as e:print(f"最小化窗口时出错: {e}")return Falseprint("程序运行中...")
time.sleep(2)  # 等待2秒,让你有时间切换到VS Code窗口# 尝试最小化活动窗口
if minimize_active_window():print("窗口已最小化")
else:print("无法最小化窗口")# 幼儿姓名    
for i in range(len(name)):  pyautogui.moveTo(535, 221)pyautogui.click() time.sleep(1)# 复制名字pyperclip.copy(name[i])# 黏贴图片地址pyautogui.hotkey('ctrl', 'v')time.sleep(1)# 查询    pyautogui.moveTo (1000, 218)pyautogui.click() time.sleep(1)# 编辑  pyautogui.moveTo (1466, 321)# pyautogui.moveTo(1569, 320)pyautogui.click() time.sleep(4)# 班级134562 # 如果等于中1,按1下,如果等于中3按2下,如果等于中4 按3下pyautogui.moveTo(1437, 614)pyautogui.click() time.sleep(1)# 定义按键规则:值 -> 按 down 次数press_rules = {'中1': 1,'中2': 6,'中3': 2,'中4': 3,'中5': 4,'中6': 5,'大1': 2,'大2': 6,'大3': 4,'大4': 5,'大5': 3,'大6': 1,}# # 延迟3秒让你切换窗口# print("3秒后开始按键,请切换到目标窗口...")# time.sleep(3)current_class = classroom[i]if current_class in press_rules:presses = press_rules[current_class]print(f"'{current_class}' 需要按 down {presses} 次")for _ in range(presses):pyautogui.press('down')time.sleep(0.1)pyautogui.press('enter')time.sleep(3)else:print(f"未找到班级 '{current_class}' 的按键规则")# 就读方式-日托pyautogui.moveTo (605, 648)pyautogui.click() time.sleep(1)pyautogui.press('down')time.sleep(1)    pyautogui.press('enter')time.sleep(1)# 户口性质-非农pyautogui.moveTo(577, 718)pyautogui.click() time.sleep(1)for i in range(1):pyautogui.press('down')time.sleep(0.1)    time.sleep(1)    pyautogui.press('enter')time.sleep(1)# 籍贯-上海 16pyautogui.moveTo (588, 805)pyautogui.click() time.sleep(1)for i in range(16):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 健康状况-健康或良好pyautogui.moveTo (1414, 690)pyautogui.click() time.sleep(1)for i in range(1):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 非农户口类型-城市pyautogui.moveTo(1428, 728)pyautogui.click() time.sleep(1)for i in range(1):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 出生地-上海pyautogui.moveTo (1438, 763)pyautogui.click() time.sleep(1)for i in range(16):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 港澳台-非港澳台pyautogui.moveTo (1426, 809)pyautogui.click() time.sleep(1)for i in range(1):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 留守儿童-非pyautogui.moveTo (1396, 851)pyautogui.click() time.sleep(1)for i in range(2):pyautogui.press('down')time.sleep(0.1)    time.sleep(0.5)    pyautogui.press('enter')time.sleep(1)# 模拟滚轮拖动# 模拟鼠标滚轮向下滚动10次for _ in range(10):pyautogui.scroll(-100)  # 负数表示向下滚动time.sleep(0.1)      # 每次滚动间隔0.1秒# 点击指定坐标的按钮# 左侧coordinates = [(565, 296),  # 原(564,296)(565, 339),  # 原(565,339)(565, 371),  # 原(561,371)(565, 409),  # 原(565,409)(565, 446)   # 原(567,446)]# 遍历并点击每个坐标点for x, y in coordinates:pyaut
http://www.lryc.cn/news/621665.html

相关文章:

  • 微信小程序 拖拽签章
  • GitHub 热榜项目 - 日榜(2025-08-15)
  • Redis核心架构
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与学习体验增强中的应用(399)
  • electron之win/mac通知免打扰
  • 基本电子元件:碳膜电阻器
  • iOS App TF 上架多工具协作实战,一次高效的应用内测分发流程
  • iOS 性能监控实战,多工具协作完成全方位分析
  • 高并发场景下限流算法对比与实践指南
  • Day59--图论--47. 参加科学大会(卡码网),94. 城市间货物运输 I(卡码网)
  • 《人形机器人的觉醒:技术革命与碳基未来》——电子皮肤技术路线:压阻式电子皮肤及Stanford可拉伸纳米线网格
  • CSS Houdini 与 React 19 调度器:打造极致流畅的网页体验
  • Backblaze 2025 Q2硬盘故障率报告解读
  • 【机器人-基础知识】ROS1和ROS2对比
  • ABAQUS多边形骨料ITZ混凝土细观受压开裂论文复现
  • 云原生俱乐部-杂谈2
  • Linux入门(十九)定时备份数据库
  • Scrapy + Django爬虫可视化项目实战(二) 详细版
  • gnu arm toolchain中的arm-none-eabi-gdb.exe的使用方法?
  • 力扣hot100 | 普通数组 | 53. 最大子数组和、56. 合并区间、189. 轮转数组、238. 除自身以外数组的乘积、41. 缺失的第一个正数
  • ITM(仪器跟踪宏单元)是什么?
  • 崩溃大陆2 送修改器 PC/手机双端(Crashlands2)免安装中文版
  • C#WPF实战出真汁07--【系统设置】--菜品类型设置
  • go应用注册到kong
  • 网络通讯核心知识
  • rent8 安装部署教程之 Windows
  • 云原生俱乐部-k8s知识点归纳(4)
  • 难以超越的 TCP AIMD
  • 在多语言大模型中保留文化细微差别:超越翻译
  • 解决Electron透明窗口点击不影响其他应用