【办公类-22-05】20240419 UIBOT填写“PATHS课程”的《SSBS校园行为问卷》

背景需求:

每年都有一个PATHS课程的“家长问卷调查”和“教师问卷调查”需要填写

作为教师,每次要对全班所有的孩子进行评价,每位孩子64题!

反复点题目,感觉非常累,工作操作就是两位老师,每人做一半孩子的问卷,但也需要很长的时间。

设计需求:

29个孩子,老师要反复点击29*64次,又看有点,又移动鼠标,实在太累了,太烦躁了,很容易最后就随便填写了,影响问卷质量。

所以我想做一个UIBOT,能够读取EXCLE表单,自动点击选择五级量表答案,然后提交。

一、提取题目,制作EXCEL表单

1、复制题目

2、黏贴到TXT内(去除选项的圆圈)

3、黏贴到EXCEL

4、删除从不、偶尔、有时、经常、总是

5、删除空行

6、把竖列变成横列

7、删除A列的题目,差异一列,改成学号和姓名

花了一点时间,把所有的学生的得分输入好

二、写代码

这个代码写了一晚上……

(一)屏幕放大到250%

确保一次只能出现一道题的5个答案

(二)测试每一页64道题目需要移动多少次滚轮

虽然每个题目行数相等

但在测试中,发现固定滚动5次并不能保证64题都正好显示五个选项,通常8题后,就会出现五个选项部分被遮挡的情况。

所以我进过大量测试后,将每道题的滚动次数逐一确定。

这些数字的意思是,模拟鼠标滚动5次,模拟鼠标运动7次。

(三)根据EXCEL数字,读取页面的文字图像,模拟点击

1、读取C2:BN30之间的所有数字

2、如果数字等于1,点击屏幕中的图像“从不”,以此类推

做到64题后,滚轮到页面底部,点击提交

(四)单人64道题完成后,进入下一个孩子的填写页面需要手动

因为29位幼儿信息目录上无法搜索孩子的学号或名字,加上我把页面放大了250%,直接点击下一位孩子的”填写问卷“按钮,也不太可能了,所以这一部分都是手动切换填写页面。

全部代码展示:

Dim temp,arrRet,滚动,iRet,objExcelWorkBook,全部区域,行数,长度,行Rem 滚动次数的列表滚动 = [14]
For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,6)For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,7)For i = 1 To 7 step 1滚动=push(滚动,5)Next
For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,6)For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,6)For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,6)For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,6)For i = 1 To 7 step 1滚动=push(滚动,5)Next滚动=push(滚动,7)TracePrint(滚动)
次=UBound(滚动)TracePrint(次)Rem 63个// Rem 滚动次数
// objExcelWorkBook = Excel.OpenExcel('''C:\Users\jg2yXRZ\OneDrive\桌面\path问卷\paths教师问卷.xlsx''',true,"Excel","","")
// 全部区域=Excel.ReadRange(objExcelWorkBook,"Sheet1","C2:BN30",true)
// 行数=UBound(全部区域)
// TracePrint(行数)// Rem 63个
// For w = 0 To 行数 step 1
// TracePrint(全部区域[w])
// 长度=UBound(全部区域[w])// TracePrint(长度)
// Next
// Rem 滚动次数// For v = 0 To 个 step 1// Mouse.Wheel(个[v],"down", [],{"iDelayAfter":300, "iDelayBefore":200})
// Next
// Excel.CloseExcel(objExcelWorkBook,true)Rem 250%
objExcelWorkBook = Excel.OpenExcel('''C:\Users\jg2yXRZ\OneDrive\桌面\path问卷\paths教师问卷模板(1).xlsx''',false,"Excel","","")
全部区域=Excel.ReadRange(objExcelWorkBook,"Sheet1","C2:BN30",true)
TracePrint(全部区域)
行=Len(全部区域)
TracePrint(行)
Rem 29行=29人
Delay(3000)
For p = 0 To 行-1 step 1
TracePrint(全部区域[p])Rem 【63个数字】【63个数字】
For v = 0 To 次 step 1TracePrint(滚动[v])
Delay(1000)Mouse.Wheel(滚动[v],"down", [],{"iDelayAfter":300, "iDelayBefore":200})
选项数字 = 全部区域[p][v]If 选项数字='1' 
#icon("@res:bbebe130-fccc-11ee-b3e3-139b772dd86b.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"bbebe130-fccc-11ee-b3e3-139b772dd86b.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
End If
If 选项数字='2' #icon("@res:ecc9cc40-fccc-11ee-b3e3-139b772dd86b.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"ecc9cc40-fccc-11ee-b3e3-139b772dd86b.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
End If
If 选项数字='3' #icon("@res:08d11740-fccd-11ee-b3e3-139b772dd86b.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"08d11740-fccd-11ee-b3e3-139b772dd86b.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
End IfIf 选项数字='4' #icon("@res:0b09c930-fccd-11ee-b3e3-139b772dd86b.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"0b09c930-fccd-11ee-b3e3-139b772dd86b.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
End IfIf 选项数字='5' #icon("@res:0d166210-fccd-11ee-b3e3-139b772dd86b.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"0d166210-fccd-11ee-b3e3-139b772dd86b.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
End IfNext
Mouse.Wheel(3,"down", [],{"iDelayAfter":300, "iDelayBefore":200})
#icon("@res:e3fa1e10-fd1e-11ee-a58c-e91e97990db1.png")
Image.Click({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"问卷清单 - 思智树教师平台 - Google Chrome","app":"chrome"}]},{"x": 0, "y": 0, "width": 0, "height": 0},@res"e3fa1e10-fd1e-11ee-a58c-e91e97990db1.png",0.9,"left","click",10000, {"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate","sMatchType":"GrayMatch", "iSerialNo": 1})
Delay(5000)Keyboard.Press("R", "press", ["Ctrl"],{"iDelayAfter": 300, "iDelayBefore": 200, "sSimulate": "simulate"})Delay(5000)Mouse.Move(1912, 600, false,{"iDelayAfter": 300, "iDelayBefore": 200})
Mouse.Click("left", "click", [],{"iDelayAfter": 300, "iDelayBefore": 300})
Mouse.Wheel(5,"down", [],{"iDelayAfter":300, "iDelayBefore":200})Mouse.Move(1422, 650, false,{"iDelayAfter": 300, "iDelayBefore": 200})
Mouse.Click("left", "click", [],{"iDelayAfter": 300, "iDelayBefore": 300})
iRet = Dialog.MsgBox("手动","Laiye Automation",0,1,0)
Next
Excel.CloseExcel(objExcelWorkBook,true)

视频展示:

一、PATHS情绪课程问卷(四人答题,自动点选选项,手动切换学号)

20240419UIBOT填写问卷(四人答题时间)

一份问卷(64题)与一份问卷(64题)之间有暂停按钮,便于人工选择下一份未完成的蓝色文字,打开问卷页面,便于程序自动填写

二、PATHS情绪课程问卷(单人答题时间)64题

20240419UIBOT填写情绪问卷(单人答题时间)

说明:

1、时间上看,做一份64题大约需要4分钟,30人就是2小时。并不比人工点击快多少。

2、效率上看,程序自动点击,不会点错,在自动选择答案时并在填完后暂停,操作者可以再此期间做些其他工作。无论多久,再回来看时,页面都保持暂停状态

3、不足之处:问卷与问卷之间需要手动切换,人力还是被圈在电脑前。但总比人工不断动脑、再无数次点击选项要省力一点。

特别说明:

第一次运行(中4班)时,最后报错,数组超过限制。

问其他班级老师要了班级名单,再测试了一次

  

第二次运行,成功!说明29行要-1=28行,0-28才是29行

感悟:

用这个uibot代码,应对明年的PATHS问卷就省力多了(O(∩_∩)O~~)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

U盘秒变0字节?别慌,数据恢复有妙招!

在日常的工作和生活中&#xff0c;U盘已成为我们不可或缺的数据存储工具。然而&#xff0c;有时候我们可能会遇到一个令人头疼的问题&#xff1a;原本存有重要文件的U盘&#xff0c;突然间容量显示为0字节。这意味着U盘中的数据全部丢失&#xff0c;无法读取。那么&#xff0c;…

hackthebox - Redeemer

2024.4.19 TASK 1 Which TCP port is open on the machine? 6379 TASK 2 Which service is running on the port that is open on the machine? redis TASK 3 What type of database is Redis? Choose from the following options: (i) In-memory Database, (ii) Traditiona…

UltraScale+的10G/25G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图1.1、xxv_ethernet_01.2、xxv_ethernet_0_sharedlogic_wrapper1.3、xxv_ethernet_0_clocking_wrapper1.4、xxv_ethernet_0_common_wrapper 二、IP核配置三、仿真四、上板测速 前言 前面我们学习了很多基于XILINX 7系列的高速接口使用&#xff0c;本文…

组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测

组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测 目录 组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本…

爬取微博评论数据

# -*- coding: utf-8 -*- import requests #用于发送请求并且拿到源代码 from bs4 import BeautifulSoup #用于解析数据 1.找到数据源地址并且分析链接 2.发送请求并且拿到数据 3.在拿到的数据中解析出需要的数据 4.存储数据 headers { "User-Agent": "…

Go微服务: go-micro集成链路追踪jaeger

关于链路追踪jeager的原理 参考: https://blog.csdn.net/Tyro_java/article/details/137754812 核心代码演示 1 ) 概述 这里接前文结构框架&#xff1a;https://blog.csdn.net/Tyro_java/article/details/137753232 2 &#xff09;核心代码&#xff1a;common/jaeger.go p…

C++中string的用法总结+底层剖析

前言&#xff1a;在C语言中&#xff0c;我们经常使用字符串进行一系列操作&#xff0c;经常使用的函数如下&#xff1a;增删改查 &#xff08;自己造轮子&#xff09;&#xff0c;C中设计出string容器&#xff0c;STL库中为我们提供了以上函数&#xff0c;所以我们使用string容…

华为OD-C卷-密码解密[100分]Python3+C语言-90%

题目描述 给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。 映射的规则(a ~ i)分别用(1 ~ 9)表示;(j ~ z)分别用("10*" ~ "26*")表示。 约束:映射始终唯一。 输入描述 “密文”字符串 输出描述 …

libftdi1学习笔记 7 - MPSSE I2C

目录 1. 初始化 2. 原理 3. i2cStart 4. i2cStop 5. i2cRecvByte 6. i2cSendByte 7. i2cRead 8. i2cWrite 9. 验证 9.1 初始化i2c 9.2 初始化gpio 9.3 写10个字节到EEPROM 9.4 读回10字节数据 9.5 运行结果 I2C&#xff08;主&#xff09;采用2个或3个GPIO模拟的…

QTableView获取可见的行数

场景 当我们需要实时刷新QTableView时&#xff0c;而此时tableView的数据量较大&#xff0c;如果全部刷新显然不合理&#xff0c;如果可以只对用户看的到的数据进行刷新那就最好了&#xff0c;经过一番摸索找到了几种方式&#xff0c;可供参考 代码 方法1 QVector<int>…

64B/66B编码 自定义PHY层设计

一、前言 之前的一篇文章讲解了64B/66B的基本原理&#xff0c;本篇在基于64B/66B GT Transceiver的基础之上设计自定义PHY。基本框图如下。 二、GT Mdule GT Module就按照4个GT CHannel共享一个GT COMMON进行设置&#xff0c;如下图。要将例子工程中的GT COMMON取出&#xff…

docker环境搭建

项目环境搭建 1、安装 Linux 虚拟机 &#xff08;1&#xff09;下载安装&#xff1a; VM VirtualBox 下载安装&#xff1a;Downloads – Oracle VM VirtualBox&#xff0c;要先开启CPU虚拟化 &#xff08;2&#xff09;通过vagrant&#xff0c;在VirtualBox中安装虚拟机 下…

STM32学习和实践笔记(15):STM32中断系统

中断概念 CPU执行程序时&#xff0c;由于发生了某种随机的事件(外部或内部)&#xff0c;引起CPU暂 时中断正在运行的程序&#xff0c;转去执行一段特殊的服务程序(中断服务子程序 或中断处理程序)&#xff0c;以处理该事件&#xff0c;该事件处理完后又返回被中断的程序 继…

修改Ubuntu的镜像源为清华镜像源

修改Ubuntu的镜像源为清华镜像源 1、首先使用以下命令备份现有的镜像源&#xff1a; cd /etc/apt sudo cp sources.list sources.list.bak 2、使用以下命令打开镜像源文件&#xff1a; sudo vim /etc/apt/sources.list 3、在vim插入模式下使用以下内容替换掉原镜像源…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

css面试题整理

css面试题 一、HTML语义化标签二、块级元素、内联元素、 行内块元素三、盒模型 一、HTML语义化标签 什么是HTML语义化标签&#xff1f;语义化标签的优势&#xff1f; HTML语义化标签顾名思义就是赋予标签含义&#xff0c;比如说<p>标签代表的是段落&#xff0c;还有<…

springboot结合vue实现文件上传下载功能

紧接着上一次的博客&#xff0c;这次来实现一下文件(主要是图片)的上传和下载功能&#xff0c;上一次的博客如下所示&#xff1a; Springboot集成JWT token实现权限验证-CSDN博客 其实文件的上传和下载功能(后端的部分)&#xff0c;在我之前的博客就已经有写了&#xff0c;所以…

区块链知识总结——智能合约

定义&#xff1a; 智能合约是一种基于区块链技术的自动化合约&#xff0c;它能够在没有第三方介入的情况下执行、管理和执行合约条款。智能合约是由代码编写的&#xff0c;存储在区块链上&#xff0c;并在满足特定条件时自动执行。 特点&#xff1a; 智能合约具有以下几个特…

LD-Pruner、EdgeFusion(On-Device T2I)、FreeDiff、TextCenGen、MemLLM

本文首发于公众号&#xff1a;机器感知 https://mp.weixin.qq.com/s/KiyNfwYWU-wBiCO-hE9qkA 苏 The devil is in the object boundary: towards annotation-free instance segmentation using Foundation Models Foundation models, pre-trained on a large amount of data…