使用Java, AppleScript对晓黑板进行自动打卡

由于我们学校要求每天7点起床打卡,但是实在做不到,遂写了这个脚本。

绪论

由于晓黑板不支持网页版,只能使用App进行打卡,所以我使用网易的安卓模拟器,安装App。

打卡实现

逻辑非常简单:

  • 使用java的Robot类来移动,点击鼠标
  • 由于Robot对模拟器输入无效,就使用Applescript键入1
  • 再点击一次按钮,完成打卡

代码:

package edu.sfls.Jeff.JavaDev.App.AutoClockIn;

import java.awt.*;
import java.awt.event.InputEvent;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws AWTException, InterruptedException, IOException {
        Robot robot = new Robot();
        robot.mouseMove(441, 978);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        Thread.sleep(10);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        Thread.sleep(1000);
        String[] script = {"osascript", "-e", "tell application \"NemuPlayer\"\n" +
                "\tactivate\n" +
                "end tell\n" +
                "\n" +
                "tell application \"System Events\"\n" +
                "\ttell process \"NemuPlayer\"\n" +
                "\t\ttell window 1\n" +
                "\t\t\tkey code 18\n" +
                "\t\tend tell\n" +
                "\tend tell\n" +
                "end tell"};
        Runtime.getRuntime().exec(script);
        Thread.sleep(1000);
        robot.mouseMove(487, 127);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        Thread.sleep(10);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
    }

}

打包java文件

首先我们需要通过IDE/命令行打包成可执行jar文件

使用AppleScript封装成App

代码:

do shell script "java -jar /Users/jefferson/Documents/Coding\\ Directory/Apple\\ Script/daka/AutoClockIn.jar"

使用plist来定时执行

虽然可以用java的办法,但是我有点懒,直接使用Mac OS原生的方法,创建一个plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <!-- 名称,要全局唯一 -->
    <key>Label</key>
    <string>com.jefferson.cron.clockin</string>
    <!-- 命令, 第一个为命令,其它为参数-->
    <key>ProgramArguments</key>
    <array>
        <string>open</string>
        <string>/Users/jefferson/Documents/Coding Directory/Apple Script/daka/daka.app</string>
    </array>
    <!-- 运行时间 -->
    <key>StartCalendarInterval</key>
    <dict>
      <key>Minute</key>
      <integer>01</integer>
      <key>Hour</key>
      <integer>7</integer>
    </dict>
    <!-- 标准输入文件 -->
    <key>StandardInPath</key>
    <string>/Users/jefferson/Documents/run-in-meican.log</string>
    <!-- 标准输出文件 -->
    <key>StandardOutPath</key>
    <string>/Users/jefferson/Documents/run-in-meican.log</string>
    <!-- 标准错误输出文件 -->
    <key>StandardErrorPath</key>
    <string>/Users/jefferson/Documents/run-in-meican.log</string>
  </dict>
</plist>

写一个shell脚本来刷新

launchctl unload ~/Library/LaunchAgents/com.jefferson.cron.clockin.plist
sleep 0.5
launchctl load ~/Library/LaunchAgents/com.jefferson.cron.clockin.plist

给脚本加权限

sudo chmod +x reset.sh

运行脚本启动

./reset.sh

使用Java, AppleScript对晓黑板进行自动打卡的更多相关文章

  1. java如何在eclipse编译时自动生成代码

    用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...

  2. asp.net自动打卡、签到程序

    目前公司上下班签到是上局域网的一个系统去点一下,由于打卡比较简单,所以有些快迟到的同事会找已经到公司的人帮忙代打卡.”以其它身份运行程序“来打开IE,去帮人打下,有时多几个人,也要这样操作,我感觉挺麻 ...

  3. 如何通过adb command 完成自动SD卡升级?

    如何通过adb command 完成自动SD卡升级? 原创 2014年09月09日 10:50:57 2746 通过adb 命令的方式,免去了按powerkey+volumeup进入menu sele ...

  4. 13.56mhz自动寻卡功能业界最低功耗:SI522

    随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...

  5. java 运算符使表达式结果类型自动提升

    1.表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte.short或char操作数提升为int类型,这些类型的包装类型也是可以的. 例如:short s1 = 1; s1 = ...

  6. Java开发工具MyEclipse的设置自动联想功能

    最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共通之处它都具备,比如说基本的设置.编辑区.调试区都是类似的, ...

  7. JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码

    一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId> ...

  8. java juint框架的windows自动化-自动运行juint程序简述

    在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...

  9. java testng框架的windows自动化-自动运行testng程序下篇

    本文旨在让读者简单了解testng的自动运行 接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说 ...

随机推荐

  1. 三个实用的javascript小技巧

    从后向前获取数组元素 如果你想从后向前获取一个数组的元素,可以这样写: var newArray = [1, 2, 3, 4] console.log(newArray.slice(-1)) // [ ...

  2. python 进程信号量

    1.概念 信号量和锁相似,锁同一时间只允许一个对象(进程)通过,信号量同一时间允许多个对象(进程)通过 2.应用场景 多线程,并规定数量 3.格式: 导入信号量模块 实例化信号量对象,可以规定信号量的 ...

  3. 关于SpringDataJpa中测试出现StackOverflowError错误问题

    在使用SpringDataJpa进行多表查询时,使用导航查询,每次都出现 StackOverflowError错误, 经过查找资料,网上百度,终于找到原因, StackOverflowError 是栈 ...

  4. Qt Installer Framework翻译(5-3)

    推广更新 创建在线安装程序,以便能够向安装产品的用户推广更新. 为了推广更新,需要执行以下步骤: 将待更新内容复制到package文件夹. 在package.xml文件中增加待更新组件的元素的值. 使 ...

  5. AttributeError: 'Table' object has no attribute 'plot'错误

    今天在用到camelot爬取pdf的表格时,想选取部分区域进行爬取,就想用plot把pdf画一下,选个坐标. 看了网上的示例,在使用camelot.read_pdf获取当前页面以后调用tables[0 ...

  6. Egret学习-TiledMap使用

    环境说明: 引擎版本:5.2.4 Egret Wing 4.1.6 1.下载依赖,下载地址https://github.com/egret-labs/egret-game-library/tree/m ...

  7. 18年第一弹射 和网络有关; 艾曲塞嗯诶系列篇 one

    1:当指定接口运行在RIP2组播方式时,以下说法正确的是 2个答案 A 只接收RIPv2组播报文 B  不接收RIPV1 广播报文 2 下面哪条命令是把PPP的认证方式设置为PAP? C ppp au ...

  8. Mixing .NET

  9. 总是在起头可是能怎么办呢 Python数据分析

    目录 前言1 第1章准备工作5 本书主要内容5 为什么要使用Python进行数据分析6 重要的Python库7 安装和设置10 社区和研讨会16 使用本书16 致谢18 第2章引言20 来自bit.l ...

  10. 深入理解大数据之——事务及其ACID特性

    目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...