数码之家签到
// ==UserScript==
// @name 数码之家签到
// @namespace mydigit_sign
// @version 1.1
// @description 数码之家论坛签到,论坛账户提前登录(登录设置保存登录状态),打开游览器后,使用脚本猫每天定时启动签到
// @author zip11
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @crontab 1-59 * once * *
// @connect www.mydigit.cn
// ==/UserScript==
'use strict';
// 读取 按钮 签到链接
function read_button_link() {
// 使用GM_xmlhttpRequest获取页面内容,并提取id为JD_sign的<a>标签的href属性
// 替换为你想要请求的URL
var targetUrl = 'https://www.mydigit.cn/k_misign-sign.html';
// 读取 签到按钮 链接
GM_xmlhttpRequest({
method: 'GET',
url: targetUrl,
onload: function(response) {
// 解析响应内容
var doc = new DOMParser().parseFromString(response.responseText, 'text/html');
// 按钮 id
var link = doc.querySelector('#JD_sign');
// 网址 非空
if (link && link.href) {
// 如果找到了链接,将其保存到GM_setValue中,以便在页面上显示或使用
// GM_setValue('JD_sign_href', link.href);
// 在控制台输出或在页面上显示链接
console.log('找到链接:', link.href);
// 访问 签到网址
sign_page(link.href);
resolve("read_link_ok")
} else {
// 获取 签到链接 失败
console.log('未找到ID为JD_sign的链接');
msgk('未找到ID为JD_sign的链接')
reject("read_link_error")
}
},
onerror: function(error) {
console.error('请求失败:', error);
}
});
}
// 访问 签到网址
function sign_page(link2) {
// 如果找到了链接,使用GM_xmlhttpRequest再次发送GET请求
GM_xmlhttpRequest({
method: 'GET',
url: link2,
onload: function(getResponse) {
// 显示返回的内容
console.log('返回的内容:');
console.log(getResponse.responseText);
// 签到 成功 检测
let pageContent = getResponse.responseText;
// 签到 成功 字符串
let targetString = "CDATA[]";
// 使用indexOf检查字符串是否存在
if (pageContent.indexOf(targetString) > -1) {
console.log('签到成功:存在', targetString);
msgk('签到成功:存在' + targetString)
return "ok"
} else {
console.log('签到出错:不存在', targetString);
msgk('签到出错:不存在' + targetString)
return "error"
}
},
onerror: function(error) {
console.error('请求失败:', error);
}
});
}
// 消息框,自动关闭 函数
function msgk(text,sec) {
// sec 如果没有输入参数,sec = 3
if (!sec) sec = 3;
GM_notification({
title: "Auto Close Notification",
text: text,
silent: true, // 是否在通知栏显示
timeout: sec*1000 // X秒后自动关闭
});
}
// 异步 延时 秒
function sleep1(time) {
time*=1000
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}
// 随机数
function sj_num() {
//Math.random() 产生 0-1
// floor 取整数 向下
let sjs = Math.floor(Math.random() * (15-5) );
sjs = sjs + 5
// 可均衡获取 5 到 15 的随机整数。
return sjs;
}
// main 主函数
return new Promise(async (resolve, reject) => {
try {
let rad_num = sj_num();
// 延时程序
await sleep1(rad_num);
// 读取按钮链接
let button_msg = read_button_link();
// 判断 签到链接 获取成功
if(button_msg == "read_link_ok") {
resolve("read-sign-link-ok");
// 执行成功
} else {
reject("read-sign-link-error");
}
} catch (error) {
//GM_log(error);
reject(error);
}
});