如何用Sikuli自动录入成绩?

注意,这个视频中,除了开始的点击运行按钮是人在操作外,后面所有的动作,都是计算机自动执行的,直到成绩全部录入完毕。

是不是看得眼花缭乱,跃跃欲试了?

代码

别着急。

为了让你自己能够通过对脚本细微修改,满足实际分数录入的需要,我们来简单阅读一下代码。

放心,代码并不长。

第一行代码,我们指定了n的数值。

n = 10

在Excel里,每一个学生的成绩,包括平时和期末,作为一条记录。

这样的记录一共有10条,所以这里我们设定一共需要循环处理的条目数为10次。

假设你班上有50人,可以将其设定为50,以此类推。

紧接着,是一条循环语句:

for i in range(n):

这就是告诉Sikuli,我们要循环执行内部的全部语句,执行次数由前面的n指定。

我们把循环内部的代码分成了4个部分,一一来看。

首先,是从Excel里面拷贝平时成绩。

 switchApp("Microsoft Excel") sleep(0.1) type("c", Key.CMD) sleep(0.1) type("c", Key.CMD) type(Key.RIGHT) sleep(0.2)

注意我们采用switchApp()函数来指定切换到哪一个应用。

应用的名称怎么设置呢?

很简单,在macOS下面,把鼠标移动到屏幕下方Dock上面的对应图标上,看到的提示就是应用的正式名称。照着写就可以。

如何用Sikuli自动录入成绩?

其中出现了3条sleep()语句。它们并不是实际执行什么内容,而是让电脑歇一下,不要急于执行下面的语句。

这是因为,有些操作需要一定的响应时间。

如果上一步操作的结果还没有响应,你就急匆匆紧接着执行下面的动作,可能会把原先的计划打乱,导致操作失误。例如还没有拷贝好内容,就进行粘贴,显然是不行的。

因此,几乎每一步操作后,我们都加上一个休眠时间,单位为秒。

另外出现的一个函数为type()

以这一句为例:

type("c", Key.CMD)

我们让Sikuli替我们按下键盘上的c键,同时还要按下控制按键Cmd。

在macOS里面,Cmd + c用来拷贝数据。如果你在Windows下,需要将其修改为Ctrl键。

这样一解释,这一段代码的含义就很清晰了。

我们做了以下动作:

  • 切换到了Excel;

  • 执行了拷贝;

  • 又执行了一遍拷贝;

  • 光标右移一格(到了期末成绩)

每一步之间,我们都让Sikuli休眠一会儿,以保证系统成功响应。

这里解释一下,为什么进行了2步拷贝。

因为在macOS里面,Excel, Word这些应用有时候用快捷键进行拷贝操作时,会出现没有成功拷贝的情况。所以为了保险起见,我不得不经常强迫症一样按下同样的操作键两次。

这里,我们让Sikuli一样执行保守操作。

好了,有了上面的知识基础,我们再来看看下面这段Web浏览器页面操作代码:

 switchApp("Google Chrome") sleep(0.1) type("a", Key.CMD) type("v", Key.CMD) type(Key.TAB) sleep(0.2)

怎么样,很容易就理解了吧?

梳理一下,我们做了以下操作:

  • 切换到了Chrome浏览器;

  • 选中当前文本框内容;

  • 把剪贴板里面的平时成绩粘贴;

  • 按TAB键,切换到下一个输入文本框(期末成绩)。

之后,我们又回到Excel继续操作:

 switchApp("Microsoft Excel") sleep(0.1) type("c", Key.CMD) sleep(0.1) type("c", Key.CMD) type(Key.DOWN) sleep(0.1) type(Key.LEFT) sleep(0.2)

这一段代码,我们做了以下动作:

  • 切换到了Excel;

  • 执行了拷贝;

  • 又执行了一遍拷贝;

  • 光标下移一格(到了新记录的期末成绩);

  • 光标左移一格(到了新记录的平时成绩)。

然后,我们又回到了Chrome。

 switchApp("Google Chrome") sleep(0.1) type("a", Key.CMD) type("v", Key.CMD) type(Key.TAB) sleep(0.1) type(Key.TAB) sleep(0.2)

最后这段代码,我们做了以下操作:

  • 切换到了Chrome浏览器;

  • 选中当前文本框内容;

  • 把剪贴板里面的平时成绩粘贴;

  • 按TAB键,切换到下一个输入文本框(备注);

  • 按TAB键,切换到下一个输入文本框(新记录的平时成绩)。

好了,这就是全部需要循环的代码了。在Excel和Chrome里,光标都指向了下一条记录的平时成绩位置。

这样再次循环的时候,就是下一条记录的输入了。依此类推。

如果你使用的系统输入界面,和我们的系统有区别,也可以根据上述命令的含义,自行调整细节,以便成功输入。

只是千万不要忘了,在语句之间用sleep()来稍作停顿。

小结

本文我为你展示了如何利用Sikuli编程环境和自动化Jython脚本,把原本枯燥的成绩录入动作,变成一键搞定。

回顾一下,我们介绍了以下内容:

  • 不同操作系统平台上的几个典型自动化脚本工具;

  • 如何安装JDK运行环境;

  • 如何安装Sikuli;

  • 如何执行Sikuli脚本;

  • 如何阅读和修改Sikuli脚本中的Jython代码。

还是那句话,用这么强悍的自动化脚本工具来输入个考试成绩,简直是委屈了它。

其实,Sikuli具有基本图标识别和像素级定位操作能力,被广泛应用于软件测试、桌面监控等领域。

如果你对它感兴趣,推荐你从官方的文档开始,深入阅读学习。

讨论

除了输入成绩以外,你还遇到过哪些需要重复执行枯燥操作指令的场景?你觉得Sikuli能否帮助你有效接管这些繁复的机械动作?除了Sikuli,你还用过哪些好用的自动化脚本工具?欢迎留言,把你的经验和思考分享给大家,我们一起交流讨论。

如果你对我的文章感兴趣,欢迎点赞,并且关注我的专栏,以便收到后续作品更新通知。

如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。


分享到:


相關文章: