之前介绍过使用temperMonkey屏蔽CSDN广告的方法,主要就是要针对性地分析网站结构,然后用代码去改变或者操作DOM。今天也一样,我们需要观察网页结构,找到我们要操作的按钮,触发他的click事件就可以了。下面以公司打卡签到的网站为例,做一些坏坏的事情。本文读者最好有一定的HTML和JavaScript基础。

首先,想象一下你去签到需要做什么:

  1. 打开网站
  2. 登陆
  3. 点击“签到”按钮

然后每一步我们都可以让代码帮我们去做。

0. 如何定时

这段代码是核心,就是根据当前时间和设定的时间做差值,来确定定时器的值
看懂这段代码,后面的就都容易了。都是在利用定时器触发callback。

// user setting
const SIGN_IN_TIME = "09:30:00"; // 签到时间
const SIGN_OUT_TIME = "20:00:00"; // 签退时间// code implementation
logTime("code start running");
const now = new Date();
const today = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate();
var signInTime = +new Date(`${today} ${SIGN_IN_TIME}`);
logTime("signInTime", new Date(signInTime));
var signOutTime = +new Date(`${today} ${SIGN_OUT_TIME}`);
logTime("signOutTime", new Date(signOutTime));
// diff in or out
if (now > signInTime && now < signOutTime) {// ready to sign out for todayconsole.log("Seconds to sign out for today: " + (signOutTime - now) / 1000);setTimeout(callback, signOutTime - now);
} else {// ready to sign in for tomorrowsignInTime = +signInTime + 60 * 60 * 24 * 1000;console.log("Seconds to sign in for tomorrow: " + (signInTime - now) / 1000);setTimeout(callback, signInTime - now);
}function logTime(str, time = new Date()) {console.log(`${str} -> ${time.getHours()}:${time.getMinutes()}:${time.getSeconds()}`);
}

1. 定时自动打开网站

因为大多数网站都有,“长时间未操作-自动退出”的设置。所以我们要在需要打卡的时候再打开网站。
在电脑本地跑一个程序,使用定时器。这里跑一个node程序:

const open = require('open');
logTime("Start Runing");// user setting
const SIGN_IN_TIME = "09:30:00";
const SIGN_OUT_TIME = "20:20:00";// code implementation
const openBrowser = async () => {await open('http://172.10.80.42');
};
logTime("code start running");
const now = new Date();
const today = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate();
var signInTime = +new Date(`${today} ${SIGN_IN_TIME}`);
logTime("signInTime", new Date(signInTime));
var signOutTime = +new Date(`${today} ${SIGN_OUT_TIME}`);
logTime("signOutTime", new Date(signOutTime));
// diff in or out
if (now > signInTime && now < signOutTime) {// ready to sign out for todayconsole.log("Seconds to sign out for today: " + (signOutTime - now) / 1000);setTimeout(openBrowser, signOutTime - now);
} else {// ready to sign in for tomorrowsignInTime = +signInTime + 60 * 60 * 24 * 1000;console.log("Seconds to sign in for tomorrow: " + (signInTime - now) / 1000);setTimeout(openBrowser, signInTime - now);
}function logTime(str, time = new Date()) {console.log(`${str} -> ${time.getHours()}:${time.getMinutes()}:${time.getSeconds()}`);
}

2. 自动登录

这个重点还是在于找到需要填入内容的DOM元素

(function() {'use strict';// logindocument.querySelector("#loginid").value = "用户名";document.querySelector("#userpassword").value = "密码";document.querySelector("#login").click();
})();

3. 定时点击按钮

这一步最重要的是要准确找到按钮,检查元素慢慢查找吧。
其次,设定好签到和签退的时间,只有固定时间才会自动签到,防止每次登陆进来自动签到或签退,这样太频繁被发现。

(function() {'use strict';// user settingconst SIGN_IN_TIME = "09:00:00";const SIGN_OUT_TIME = "21:00:00";// code implementationlogTime("code start running");const now = new Date();const today = now.getFullYear()+"-"+(now.getMonth()+1)+"-"+now.getDate();var signInTime = +new Date(`${today} ${SIGN_IN_TIME}`);logTime("signInTime", new Date(signInTime));var signOutTime = +new Date(`${today} ${SIGN_OUT_TIME}`);logTime("signOutTime", new Date(signOutTime));// diff in or outif(now > signInTime && now < signOutTime) {// ready to sign out for todayconsole.log("Seconds to sign out for today: " + (signOutTime - now)/1000);setTimeout(signInorSignOut, signOutTime - now);} else {// ready to sign in for tomorrowsignInTime = +signInTime + 60 * 60 * 24 * 1000;console.log("Seconds to sign in for tomorrow: " + (signInTime - now)/1000);setTimeout(signInorSignOut, signInTime - now);}// signInorSignOutfunction signInorSignOut(){logTime(`signInButton clicked!`);// 重点就在这儿了,找到网站的签到按钮#signInButton,并触发他的点击事件document.querySelector("#signInButton").click();}function logTime(str, time=new Date()){console.log(`${str} -> ${time.getHours()}:${time.getMinutes()}:${time.getSeconds()}`);}
})();

4. 结束

一套操作,打完收工。每天下班的时候,不管是提前溜还是晚点到。记得本地开一下程序:

node timer.js

【JavaScript】分享一个定时到网站上签到/签退的JS脚本相关推荐

  1. 分享一个有趣的网站“让我帮你百度一下“

    如何解决同事的弱智问题,分享一个有趣的网站 日常工作中,总有些人会问你一些弱智的问题 你只需要三步就可以完美解决: 1.打开这个链接: 让我帮你百度一下 2.输入他的问题.点回车 3.复制结果链接甩到 ...

  2. javascript 实现一个定时遍历数组,每隔一段相同的时间取出数组中的一项进行操作

    javascript 实现一个定时遍历数组的方法,每隔一段相同的时间取出数组中的一项进行操作 如果使用频繁建议 可以利用原型链,方法挂在在Array的prototype上面 setTimeInLoop ...

  3. 分享一个如何从电脑上彻底删除WPS的操作

    分享一个如何从电脑上彻底删除WPS的操作@TOC 一. 打开WPS的安装文件,找到utility下的uninst.exe后运行 注意不要勾选保留用户配置文件 二. 然后打开regedit注册表,找到\ ...

  4. 分享一个AI模型网站,琳琅满目

    分享一个AI模型网站,配合我先前分享的 文本生成图片-稳定扩散模型web端,绝对

  5. 实现高德地图签到签退(uniapp)

    项目场景: 用uniapp 实现签到签退(使用高德的api) 问题描述 提示:这里描述项目中遇到的问题: 例如:使用uniapp 自带的组件不能实现点击地图 再签退 提示思路: 提示:使用uniapp ...

  6. OA系统:实现签到签退功能

    一.思路 1.创建数据库(注:添加自增主键或者双主键,这里使用了自增主键dtid) 2.创建控制层和业务层,添加signin和signout两种方法 二.功能实现 1.创建数据库 create tab ...

  7. JavaEE中,考勤(签到签退)功能的实现

    体会实现具体功能的思想并加以运用 签到功能 1.数据库中要有相应的表,并创建相应的实体类,复写相关方法 2.在相关的jsp页面添加两个jsp按钮,用于签到与签退,并添加id属性 3.在servlet中 ...

  8. 分享一个打字练习网站

    成为一个优秀的程序员,打字速度虽然不是必要条件.但是一个打字快的程序员,必然会享受自己的打字速度,速度快听着啪啪声实在是爽的不行. Ratatype Ratatype 是一个在线的打字教程网站,能够帮 ...

  9. 每日自动签到签退的程序

    公司里有一个网页版的考勤系统.每天打开电脑,用域账户登录,然后打开IE,输入网址,系统会自动感知你的域账户,显示个人信息,在8点半之前点击签到就不算迟到. 像下面的图这样 终于有一天由于地铁故障迟到了 ...

最新文章

  1. [JAVA EE] Thymeleaf 常用工具类
  2. AI算法效率每16个月提速一倍,算力革命超越摩尔定律
  3. 何恺明团队新作:图像分割精细度空前,边缘自带抗锯齿,算力仅需Mask R-CNN的2.6%...
  4. Java桌面程序打包成exe可执行文件
  5. Java基础部分自测题(持续更新)
  6. 继承之接口知识点和思考练习
  7. 高并发下如何生成唯一订单号?
  8. 微信小程序入门9-微信开放平台unionId机制介绍
  9. RocketMQ 延迟队列
  10. selectpicker.js的属性和方法
  11. uni app中使用图表
  12. java rgb转yuv_RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法(java实现)
  13. 【Matlab】如何自定义无输入和无输出的函数?
  14. 验证身份证号是否正确,计算身份证号最后一位
  15. 数字IC开发软件介绍
  16. 全球及中国落地音箱行业市场发展前景展望与投资战略规划研究报告2022-2028年
  17. PTA 基础编程题目集 7-1 厘米换算英尺英寸
  18. vs2015+qt国际化翻译问题:Linguist中源代码不可见
  19. 9个加密货币交易所被查封,交易所安全审计后仍不安全
  20. Android JS调原生 有盟分享 打开微信分享 原程序崩溃问题 报android.view.ViewRootImpl$CalledFromWrongThreadException:

热门文章

  1. 网络营销推广效果在于流量精准度!你做到了吗?
  2. 图像细节增强(直方图均衡化,对数变换,Gamma变换(校正))
  3. windows双屏显示如何设置
  4. android 代码删除快捷方式,Android创建快捷方式以及删除快捷方式
  5. arduino与hcsr04_基于Arduino的超声波传感器HC-SR04
  6. 优化单页面的技巧和文章不被收录原因
  7. Vim位置标记mark详解
  8. 技术干货 | 人大金仓KFS基于分区索引的分片入库技术解析
  9. Spring解决跨域问题方案
  10. 吹爆“Alibaba”自研Spring全家桶全套全彩学习笔记(终极版)