QianDao Script

web qiandao script.

当前为 2023-10-19 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name QianDao Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description web qiandao script.
  6. // @author LaoTie
  7. // @match https://www.7xjia.com/mission/today
  8. // @match https://juejin.cn/*
  9. // @icon
  10. // @grant GM_getValue
  11. // @grant GM_setValue
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. (async function () {
  16. 'use strict';
  17.  
  18. // denglu();
  19. // Task(Defaultsave);
  20.  
  21. Start();
  22. })();
  23.  
  24. function save(data) {
  25. GM_setValue('data', data);
  26. }
  27.  
  28. async function Start() {
  29. formattedDate();
  30. if(document.location.host==='juejin.cn'){
  31. window.addEventListener('load',function(){
  32. Task(juejin).then(juejin_click1);
  33. },false);
  34. }
  35. if (document.location.host==='www.7xjia.com') {
  36. await Task(qiandaoObs).then(dengluObs).then(denglu())
  37. setInterval(
  38. await Task(qiandaoObs).then(dengluObs).then(denglu()), 1000 * 60 * 60
  39. );
  40. }
  41. }
  42.  
  43. async function juejin(){
  44. const btn= document.querySelector('.btn-text');
  45. if(btn!=null){
  46. btn.click();
  47. }
  48. }
  49.  
  50. function juejin_click1(){
  51. const btn=document.querySelector('.signin.btn');
  52. if(btn!=null){
  53. btn.click();
  54. }
  55. }
  56.  
  57. async function denglu() {
  58. const btn = document.querySelector('.header-login-button button');
  59. if (btn != null) {
  60. btn.click();
  61. }
  62. }
  63.  
  64. const event = document.createEvent('HTMLEvents')
  65. event.initEvent('input', false, true)
  66.  
  67. async function dengluObs() {
  68. var node = document.querySelector('.modal');
  69. var conf = { attributes: true };
  70. const callback = async (mutationList) => {
  71. for (const element of mutationList) {
  72. if (element.type == 'attributes') {
  73. console.log('登录observer-count:', element);
  74. await taskUser();
  75. nodeobserver.disconnect();
  76. }
  77. };
  78. }
  79. var nodeobserver = new MutationObserver(callback);
  80. nodeobserver.observe(node, conf);
  81. }
  82.  
  83. function qiandaoObs() {
  84. const node = document.querySelector('.custom-page-title.box.b2-radius.b2-pd.mg-b');
  85. var conf = { attributes: true, childList: true, subtree: true }
  86. const callback = async (mutationList) => {
  87. for (const element of mutationList) {
  88. if (element.type == 'childList') {
  89. console.log('签到observer-count:', element);
  90. await Task(qiandao);
  91. await Task(LoginOut);
  92. nodeobserver.disconnect();
  93. return;
  94. }
  95. };
  96. }
  97. var nodeobserver = new MutationObserver(callback);
  98. nodeobserver.observe(node, conf);
  99. }
  100.  
  101. async function taskUser() {
  102. let users = await GM_getValue('data');
  103. for (u of users) {
  104. console.log(u.name);
  105. if (Date.now() - u.date > 1000 * 60 * 60 * 24) {
  106. const username = document.querySelector('.login-form-item input[name=username]');
  107. username.value = u.name;
  108. username.dispatchEvent(event);
  109. const pass = document.querySelector('.login-form-item input[name=password]');
  110. pass.value = u.pass;
  111. pass.dispatchEvent(event);
  112. document.querySelector('.login-bottom button').click();
  113. u.date = Date.now();
  114. await Task(save, users);
  115. return;
  116. }
  117. }
  118. }
  119.  
  120. async function qiandao() {
  121. const has = document.querySelector('.custom-page-row.gold-row.mg-t span b');
  122. if (has != null && has.innerText == '今日未签到') {
  123. document.querySelector('.custom-page-row.gold-row.mg-t button').click();
  124. }
  125. }
  126.  
  127. async function LoginOut() {
  128. const logout = document.querySelector('.top-user-avatar.avatar-parent img');
  129. if (logout != null) {
  130. logout.click();
  131. document.querySelector('.login-out.user-tips a').click();
  132. }
  133. }
  134.  
  135. function formattedDate(){
  136. const date = new Date();
  137. const year = date.getFullYear();
  138. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  139. const day = date.getDate().toString().padStart(2, '0');
  140. const hour = date.getHours().toString().padStart(2, '0');
  141. const minute = date.getMinutes().toString().padStart(2, '0');
  142. const second = date.getSeconds().toString().padStart(2, '0');
  143. const formattedDate = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
  144. console.log(formattedDate);
  145. }
  146.  
  147. function Task(t) {
  148. return new Promise((r, j) => {
  149. r(t())
  150. });
  151. }
  152.  
  153. function Task(t, d) {
  154. return new Promise((r, j) => {
  155. r(t(d))
  156. });
  157. }
  158.  
  159. function Defaultsave() {
  160. let users = [{ name: 'lihui7800@163.com', pass: '3402690', date: 0 }, { name: 'qixijia001@163.com', pass: '3402690', date: 0 },
  161. { name: 'qixijia002@163.com', pass: '3402690', date: 0 }, { name: 'qixijia003@163.com', pass: '3402690', date: 0 }];
  162. GM_setValue('data', users);
  163. }