前段时间用python写了个学校自动打卡的脚本,自己用的很舒服,但在其他电脑尤其是没有python的电脑上,想要直接配置好并运行并不是一件方便的事情。于是我准备用C#写一个用户界面,因为前段时间写过C#的其他winform程序,所以还算有点经验。

事实上,最方便的方法也许是,将打卡所需登录信息直接发送至已配置好环境的服务器上,直接设置计划任务运行即可。我可以直接编写一个软件将信息发送到服务器上,通过预先编写的脚本直接为用户配置好自动打卡程序。但是,一方面,这严重存在账号信息泄露的风险,因为脚本的持续运行使得对账号和密码的获取是直接且长期的,若被居心不轨之人所利用,后果不堪设想,且软件作者无法自证清白。另一方面,若服务器上登录了众多信息,必然会对服务器造成压力,本服务器的配置虽然谈不上差,但不一定能顶住这些压力。

Day1

首先梳理了一下思路原理:

①预先使用Conda Pack打包好脚本的运行环境,便于之后使用用户界面将环境快速激活,而无需通过命令行界面操作。

②填写脚本config信息的环境挪进用户界面,使用IO流进行编辑,使用户无需直接编辑json配置文件。

③同时配备了直观的定时设置信息,通过编写好的函数,让用户可以直接在本程序内编辑对脚本的计划任务。(在后台运行cmd.exe,使用schtasks命令)

所有信息均存放于本地,且与打卡网站直接交互,不经过第三方。

用户拿到程序后,仅需点击“加载配置”,填写信息,点击测试按钮验证信息可用性,之后添加定时任务,整个脚本的配置过程便已结束,操作过程十分便捷。

确定好了界面的基本形状,点击“添加定时任务”按钮后会弹出额外窗口用来详细填写任务信息。

Day2

吐槽:VisualStudio经常崩溃,可能半个小时一次,暂时没有找到原因,好在没有丢失过进度。

发现Selenium有C#版,让我有点纠结,转换脚本语言可以减少配置python环境带来的种种问题,代价是我需要重构脚本。不过这应该是值得的,因为这样还可以大大缩小程序的体积,而且无需跨语言交互,减少了很多潜在的问题。

重构脚本中…………

Day3

脚本重构完毕,完善各功能中

测试功能已完成,基本上就只差计划任务功能了

经过思考决定采用以下方法:

使用xml文件作为载体存放用于显示主界面listview中计划任务的信息(非计划任务xml,仅存放显示信息)

在“添加定时任务窗口“中,点击添加任务后,在后台使用cmd添加计划任务并反馈添加是否成功的信息,若成功,则向xml文件中添加信息。

主界面中,每次打开窗口时(Form.OnLoad事件)遍历xml文件中信息并在listview中显示出来。

点击删除任务后,删除系统计划任务中对应项,再删除xml中对应项,再删除listview中对应项。(问题,如何确保正确删除?只能在本地测试不出问题,但不知道在他人电脑上会出现什么问题)

开始学习xml相关…………

到时候想写个C#与xml交互的文章,网上的感觉太乱了。。

Day4

学XML

Day5

学XML

通过XML储存数据的功能做好啦!

吐槽一下,微软的xml文档写的也不好。。很多细节都没表现出来,还得使用者自己去慢慢试

Day6

试了一下Linq to XML,还不错。。与XML互动的部分算是写完了

尝试把项目从.net5退回.net framework 4.7.2,但不是很顺利。然后发现.net5的库安装包只有50多mb,之前以为是500mb.。。感觉这样就可以接受了,以后要是再有需求和时间的话再去尝试挪。。

selenium3里面的edgeoptions没有隐藏窗口参数。。吓了我一跳,不过去网上找了一下,找到了微软的edge-selenium-tools,用了之后可以操作窗口隐藏了。。

Day7

星期天了,过的好快

今天把脚本主体重新优化了一下,加了几个功能。前几天发现自己编程仍然没有面向对象的习惯,改的时候难受得要死。。

找到了让脚本主体窗口隐藏的方法:Properties->应用程序->输出类型->Windows应用程序

Day8

Day7的晚上12点,写完了。。但是还没测试

早上起来想把用到的xml知识整理一下

Day?

过去了很久,不继续写了,因为已经差不多了..

(结果xml知识到现在还没整理..)

下面是软件的发布页面


I am a noob