使用Java, AppleScript对晓黑板进行自动打卡
使用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对晓黑板进行自动打卡的更多相关文章
- java如何在eclipse编译时自动生成代码
用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...
- asp.net自动打卡、签到程序
目前公司上下班签到是上局域网的一个系统去点一下,由于打卡比较简单,所以有些快迟到的同事会找已经到公司的人帮忙代打卡.”以其它身份运行程序“来打开IE,去帮人打下,有时多几个人,也要这样操作,我感觉挺麻 ...
- 如何通过adb command 完成自动SD卡升级?
如何通过adb command 完成自动SD卡升级? 原创 2014年09月09日 10:50:57 2746 通过adb 命令的方式,免去了按powerkey+volumeup进入menu sele ...
- 13.56mhz自动寻卡功能业界最低功耗:SI522
随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...
- java 运算符使表达式结果类型自动提升
1.表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte.short或char操作数提升为int类型,这些类型的包装类型也是可以的. 例如:short s1 = 1; s1 = ...
- Java开发工具MyEclipse的设置自动联想功能
最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共通之处它都具备,比如说基本的设置.编辑区.调试区都是类似的, ...
- JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码
一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId> ...
- java juint框架的windows自动化-自动运行juint程序简述
在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...
- java testng框架的windows自动化-自动运行testng程序下篇
本文旨在让读者简单了解testng的自动运行 接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说 ...
随机推荐
- hdu 5139 数据的离线处理
所谓的数据离线处理,就是将所有的输入数据全部读入后,在进行统一的操作,这样当然有好处,比如让你算好多数的阶层,但是输入的每个数是没有顺序的,其实跟可以线性的解决,但是由于没有顺序的输入,这样处理的话复 ...
- 深入理解es6中的Promise
https://www.jianshu.com/p/9e4af5b77253 https://zhuanlan.zhihu.com/p/30797777 https://segmentfault.co ...
- Android栈溢出漏洞利用练习
在Github上看到一个Linux系统上的栈溢出漏洞利用练习项目: easy-linux-pwn.在原项目基础上,我稍微做了一些改动,将这个项目移植到了Android 9.0系统上: easy-and ...
- Burpsuite设置拦截response
一.Burpsuite设置拦截HTTP/HTTPS代理 1, .拦截修改request 首先进入Proxy-Options-Intercept Client Requests设置request拦截的规 ...
- python 线程信号量
线程信号量和进程信号量相似 # 线程信号量 import time from threading import Semaphore from threading import Thread def t ...
- .net core 连接数据库(通过数据库生成Modell)
创建数据库 (扫盲贴还劳烦大神们勿喷,谢谢) 打开数据库 输入如下代码 创建数据库 CREATE DATABASE [Blogging]; GO USE [Blogging]; GO CREATE T ...
- 【Java面试】Mybatis篇
1.MyBatis编程步骤是什么样的? ① 创建SqlSessionFactory ② 通过SqlSessionFactory创建SqlSession ③ 通过sqlsession执行数据库操作 ④ ...
- 线性最长cover(无讲解)
#include<bits/stdc++.h> using namespace std; ; int n,f[maxn],cover[maxn],R[maxn]; char str[max ...
- 详细步骤:手动添加bits/stdc++.h到vs2017
本机环境:win10系统 64位 vs2017 最近码代码时偶然发现了bits/stdc++.h这个头文件(万能头文件),基本上所有的代码只要用了这个头文件就不再写其他头文件了. 看到它就仿佛开启了新 ...
- STM8 关闭PWM输出后的电平输出问题解决
STM系列的单片机PWM输出如果被关断比如用TIM1_CtrlPWMOutputs进行停止输出后,电平的高低处于不确定的状态. 他取决于: 1.GPIO初始化的特性 2.关断那一刻时的电平 3.CCM ...