EPT 考试中查询单词脚本的设计与实现

由于疫情,本学期的 EPT 英语测试改为在学生电脑上下载考试机客户端程序进行。不幸的是,该客户端程序存在许多漏洞,比如没有强制锁定桌面,没有强制锁定输入法,没有限制后台程序等等,以及还有许多不人性化的 bug 存在,收获差评无数。最初,有同学发现在考试客户端中欧陆词典可以正常运行,在这个尝试的启发下,我开始尝试开发一个可以在 EPT 考试软件运行过程中,隐蔽查词的脚本。

可行性分析

我们首先进行可行性分析。由于考试系统的设计,考试客户端会强制置顶显示在屏幕上,然而置顶并不意味着不能对除了考试程序窗口之外的窗口进行操作。我们设想一块布蒙在眼前,但是双手却可以自由操控布后的东西。这是因为程序没有锁死考试屏幕为唯一的活动屏幕,这意味着你仍然尝试可以通过命令,打开其他窗口,并且设定它为新的活动窗口,这样你甚至可以操作鼠标键盘对其进行输入输出交互。更加令人欣喜地是,此时的考试窗口(仍然保持置顶状态)成了一个可以掩盖你的操作的挡板,只有你知道你在做什么,监考人员并无法发现你的操作。

脚本设计与实现

经过上述分析,我们了解了绕过置顶的考试窗口进行操作的可能性,我们便可以尝试设计脚本的功能和实现方式。

我最终将设计目标定在了可以实现查询单词功能,并且使用隐蔽方法调用和返回功能的脚本。查询单词功能比较简单,而且也比较实用,隐蔽性则是脚本是否实用的另一个重要标准,毕竟这是一个可能会在考试中运行的脚本(笑

针对这一目标,我选择了我的实现方式:

我使用 quicker 作为脚本的运行和编写平台。quicker 是一个可以运行自动化脚本的 windows 应用程序,可以通过易上手的简单的方式,编写可以控制电脑各个层面的自动化脚本。读取所需翻译文字的方式,我选择通过选中文字读取如剪切板的方式进行。这样的方法足够隐蔽,因为选中文字不太会引起怀疑,你甚至可以使用 ctrl+x 键的组合唤醒脚本假装这是在剪切文字,更加不容易被察觉。

打开翻译网站进行翻译的方法选择,其实来历十分波折。一开始,我想通过打开本地翻译窗口的方式进行,但是一个问题是,我没有办法在考试端窗口置顶的情况下,将一个打开的窗口设置为活动窗口,除非我每次都重新将本地应用打开,然后关闭,这样的效率非常低,而且实测操作本地软件的方式相对繁琐,需要鼠标移动控制,(因为没有对应的接口),于是我放弃了使用本地程序的方法。

而使用网页端的好处是,quicker 中有原生支持浏览器打开以及浏览器内元素操作的集成方法,开箱即用,同时网页端翻译,可以使用 js 语言轻松地操控页面元素,操作难度降低。因此网页端翻译成了我的选择。然而,接下来我又遇到的困难,依然是无法设置浏览器为活动窗口,因为 quicker 的开箱即用的浏览器方法并没有给出设置为活动窗口的方式。正在我的设计陷入僵局的时候,我意外地发现了 quicker 中支持的 Edge-Webview2 浏览器。这个浏览器虽然没有 quicker 另一个已经成熟开发的方法那么成熟,但是能够设定为活动窗口,同时也有基本的打开网页,运行 js 脚本的接口,又兼具小巧速度快的优点,而这些便足够我使用了。于是 Web-view2 浏览器成为了我的选择,通过接口打开微软翻译网站,并且将需查询的词语复制入查询框,在读取输出框的 value 复制入剪贴板,完成查词工作。

对于输出方式,我的考虑依然是以隐蔽性为主。最简单的隐蔽输出就是通过剪贴板。脚本运行后,使用 ctrl+v 就可以取出剪贴板中的内容,十分地隐蔽。但是,考虑到考生屏幕可能会被监视,直接显示出中文仍然不够安全。于是我想到,通过耳机,将查好的词语用声音播放出来,音频是不会有人监控的,这样就达到了 100% 的隐蔽。

于是我开始开发音频输出的方式。其实微软翻译网站本身就自带发声的按钮,但是由于 限制 原因,我无法通过 js 直接对按钮进行操作,遂放弃。我又找到了一个可以输入词组直接朗读的免费开放网站:读出来 ,由国内大神开发,完美地符合我的要求。我只需打开网页,将剪切板中的词语复制如框中,网站会自动将这个词语读出来,省去了我模拟点击按钮开始朗读的操作。

至此设计和实现的思路已经介绍完毕,我总结了脚本的工作流程为:通过快捷键调用存储在 quicker 中的脚本,脚本运行后读取当前选中文字读入剪贴板,打开网页进入微软翻译网站,粘贴,读取翻译后文字进入剪贴板。之后再打开读出来网站,将剪贴板中翻译好的文字粘贴,等待网站自动朗读文字,实行最隐蔽输出。

脚本发布

脚本已经发布在 get_quicker.net, 名称为 **EPT 考试中查词 **,该脚本已在模拟测试中进行过测试。

** 脚本仅供学习交流使用,不可用于考试作弊相关操作!**