JDbScript

提效gogogo!

  1. // ==UserScript==
  2. // @name JDbScript
  3. // @namespace http://598570789@qq.com/
  4. // @version 0.6
  5. // @description 提效gogogo!
  6. // @author JDb
  7. // @compatible chrome
  8. // @compatible firefox
  9. // @match *://*.shizhuang-inc.com/*
  10. // @match *://*.shizhuang-inc.net/*
  11. // @match *://open.feishu.cn/*
  12. // @match *://home.console.aliyun.com/*
  13. // @match *://ide2-cn-hangzhou.data.aliyun.com/*
  14. // @match *://poizon.feishu.cn/docx/JaBTdv67yoeXLzxXbZ6cntjXnGb
  15. // @include *://signin.aliyun.com/poizon.onaliyun.com/*
  16. // @license MIT
  17. // @run-at document-start
  18. // @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
  19. // ==/UserScript==
  20. var 测试 = 80;//P
  21. var 吃啥 = 69;//E
  22. var 评测默认没问题 = 79;//O
  23. // 键盘编码表 https://jingyan.baidu.com/article/fedf073780e16335ac8977a4.html
  24. // console document.querySelector("video").playbackRate=
  25.  
  26. //获取所有 class 同时包括 'red' 和 'test' 的元素.
  27. //document.getElementsByClassName('red test');
  28.  
  29. //在id 为'main'的元素的子节点中,获取所有class为'test'的元素
  30. //document.getElementById('main').getElementsByClassName('test');
  31.  
  32.  
  33. //吃啥
  34. var eatwhatUrl="https://poizon.feishu.cn/docx/JaBTdv67yoeXLzxXbZ6cntjXnGb";
  35. //统一登录平台
  36. var poizonLoginAliyunUrl="https://prism.shizhuang-inc.com/account/cloudy/account/my";
  37. //阿里云控制台
  38. var ailiyunConsoleUrl="https://home.console.aliyun.com/home/dashboard/ProductAndService";
  39. //poizon登录 飞书扫码
  40. var poizonLoginUrl="https://sso.shizhuang-inc.com/";
  41. //poizon登录 飞书授权
  42. var poizonLoginUrl2="https://open.feishu.cn/open-apis/authen/v1/user_auth_page_beta";
  43. // dataworks审批
  44. var dataworksReviewUrl="https://ide2-cn-hangzhou.data.aliyun.com/page/review";
  45. var dataworksReviewDetailUrl="https://ide2-cn-hangzhou.data.aliyun.com/page/review/detail";
  46.  
  47. //资源加载完成事件
  48. (function() {
  49. 'use strict';
  50. window.onload = ()=>{
  51. doTask();
  52. }
  53. })();
  54.  
  55. //dom加载完成事件
  56. document.addEventListener("DOMContentLoaded", onDomReady);
  57. function onDomReady() {
  58. closeAliyun();
  59. }
  60.  
  61. //标签切换事件
  62. document.addEventListener('visibilitychange', () => {
  63. if(document.visibilityState === 'hidden') {
  64. // 离开当前tab标签
  65. }else {
  66. log("回到当前tab标签")
  67. //回到sso登录页,关闭
  68. if("prism.shizhuang-inc.com"===document.domain){
  69. window.close()
  70. history.back(1)
  71. return
  72. }
  73. //回到阿里云ram用户登录页,刷新
  74. if("signin.aliyun.com"===document.domain){
  75. location.reload()
  76. return
  77. }
  78. //回到datawork审批,刷新
  79. if(isUrlOrDomainMatch(dataworksReviewUrl)){
  80. // location.reload()
  81. // autoReview()
  82. return
  83. }
  84. }
  85. }
  86. )
  87. const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
  88.  
  89. //页面加载后执行
  90. async function doTask(){
  91. // log("domain:"+document.domain)
  92. // log("url:"+decodeURIComponent(location.href.split('#')[0]))
  93. log(window.location.protocol+"//"+window.location.host+""+window.location.pathname)
  94.  
  95. await sleep(300);
  96.  
  97. //自动登录 阿里云
  98. autoLoginAliyun()
  99. //自动登录 poizon
  100. autoLoginPoizon()
  101. //自动审批 dataworks任务
  102. // autoReview()
  103. //吃啥
  104. eatWhat()
  105.  
  106. }
  107.  
  108. async function autoLoginAliyun(){
  109. if(!isUrlOrDomainMatch("signin.aliyun.com")&&!isUrlMatch(poizonLoginAliyunUrl)&&!isUrlMatch(ailiyunConsoleUrl)){
  110. return;
  111. }
  112. log("是阿里云登录页面")
  113.  
  114. //1.打开公司登录页面
  115. if(hasTag('button','使用企业账号登录') && "signin.aliyun.com"===document.domain ){
  116. log("autoLoginAliyun.1.打开公司登录页面")
  117. window.open("https://prism.shizhuang-inc.com/cloud/cloudy",'_blank');
  118. return
  119. }
  120. //2.点开控制台登录
  121. if("prism.shizhuang-inc.com"===document.domain){
  122. log("autoLoginAliyun.2.点开控制台登录")
  123. if(await clickTagPlus('button','控制台登陆',true)){
  124. sleep(500)
  125. log("点击控制台登陆成功")
  126. // window.close()
  127. }else{
  128. error("点击控制台登陆失败")
  129. }
  130. return
  131. }
  132. }
  133. function closeAliyun(){
  134. //1.关闭阿里云控制台
  135. if("home.console.aliyun.com"===document.domain){
  136. log("autoLoginAliyun.3.关闭阿里云控制台")
  137. window.close()
  138. return
  139. }
  140. }
  141.  
  142. function autoLoginPoizon(){
  143. if(!isUrlOrDomainMatch(poizonLoginUrl)&&!isUrlOrDomainMatch(poizonLoginUrl2)){
  144. return
  145. }
  146. log("是poizon登录页面")
  147.  
  148. //1.飞书扫码登录
  149. if(isUrlOrDomainMatch(poizonLoginUrl)){
  150. log("autoLoginPoizon.1")
  151. clickTag('button','飞书扫码登录')
  152. return
  153. }
  154. //2.授权
  155. if(isUrlOrDomainMatch(poizonLoginUrl2)){
  156. log("autoLoginPoizon.1")
  157. clickTag('div','授权',false)
  158. return
  159. }
  160. }
  161. async function autoReview(){
  162. if(!isUrlOrDomainMatch(dataworksReviewUrl)&&!isUrlOrDomainMatch(dataworksReviewDetailUrl)){
  163. return
  164. }
  165.  
  166. //审批列表
  167. if(isUrlOrDomainMatch(dataworksReviewUrl)){
  168. if(await clickTagPlus('button','查看',true)){
  169. return
  170. }
  171. }
  172.  
  173.  
  174. //审批详情
  175. if(isUrlOrDomainMatch(dataworksReviewDetailUrl)){
  176. if(hasTag(('button','通过'))){
  177. if(await clickTagPlus('button','通过',true)){
  178. // window.close()
  179. return
  180. }
  181. }else{
  182. window.close()
  183. }
  184. }
  185.  
  186. }
  187.  
  188.  
  189. function log(str){
  190. var d=new Date()
  191. var s=d.getMinutes()+":" + d.getSeconds() + " "+ str;
  192. console.log('%c'+s,'color:green;fontpsize:35px;')
  193. }
  194. function error(str){
  195. var d=new Date()
  196. var s=d.getMinutes()+":" + d.getSeconds() + " "+ str;
  197. console.error('%c'+s,'color:red;fontpsize:35px;')
  198. }
  199.  
  200.  
  201.  
  202.  
  203. //域名或完整地址匹配
  204. function isUrlOrDomainMatch(urlOrDamin){
  205. // log("isUrlOrDomainMatch.urlOrDamin:"+isUrlOrDomainMatch.urlOrDamin)
  206. return isUrlMatch(urlOrDamin)||isDomainMatch(urlOrDamin)
  207. }
  208. //完整地址匹配
  209. function isUrlMatch(url){
  210. if(window.location.protocol+"//"+window.location.host+""+window.location.pathname===url){
  211. log("matchUrlSuccess:"+url)
  212. return true
  213. }
  214. error("matchUrlFail:"+url)
  215. return false
  216. }
  217. //域名匹配
  218. function isDomainMatch(domain){
  219. if(domain===document.domain){
  220. log("domainMatchSuccess:"+domain)
  221. return true
  222. }
  223. error("domainMatchFail:"+domain)
  224. return false
  225. }
  226.  
  227.  
  228.  
  229. //ark自动审批
  230. async function autoCheckArk(){
  231. log("autoCheckArk()")
  232. log(window.location.href)
  233.  
  234. var eleArr
  235. var rs
  236. if(window.location.href.indexOf("ark.shizhuang-inc.com/approveList?")!=-1
  237. ||
  238. window.location.href.indexOf("ark.shizhuang-inc.com/ark/approveList?")!=-1
  239. ){
  240. log("进入ark list")
  241. retry(()=>clickTag('a','详情',true))
  242. await sleep(1000)
  243.  
  244. if(await retry(()=>clickTag('button','审批通过',true))){
  245. retry(()=>clickTag('button','返回',true))
  246. }
  247. }
  248. }
  249.  
  250. //是否有当前指定标签
  251. async function hasTag(tag,val){
  252. await sleep(500);
  253. var eleArr = document.getElementsByTagName(tag);
  254. var rs=false
  255. for( var i=0; i<eleArr.length; i++ ){
  256. // log("value="+eleArr[i].value+" innerText="+eleArr[i].innerText)
  257. if(val===eleArr[i].innerText||val===eleArr[i].value){
  258. rs= true
  259. }
  260. }
  261. return rs;
  262. }
  263.  
  264. //带重试的点击行为
  265. async function clickTagPlus(tag,val,onlyFirst){
  266. for(var i=0;i<30;i++){
  267. log("第"+(i+1)+"次点击:"+val)
  268. if(await clickTag(tag,val,onlyFirst)){
  269. return true;
  270. }
  271. await sleep(1000);
  272. }
  273. return false;
  274. }
  275.  
  276. //点击行为
  277. async function clickTag(tag,val,onlyFirst){
  278. await sleep(500);
  279. // log("clickTag(" + val + ")")
  280. var eleArr = document.getElementsByTagName(tag);
  281. var rs=false
  282. for( var i=0; i<eleArr.length; i++ ){
  283. // log("value="+eleArr[i].value+" innerText="+eleArr[i].innerText)
  284. if(tag==='button'||tag==='input'){
  285. if(val===eleArr[i].innerText.trim()||val===eleArr[i].value.trim()){
  286. eleArr[i].click()
  287. // log("点击"+val)
  288. rs= true
  289. }
  290. }else{
  291. if(val==eleArr[i].innerText){
  292. eleArr[i].click()
  293. // log("点击"+val)
  294. rs= true
  295. }
  296. }
  297. if(onlyFirst && rs){
  298. return rs;
  299. }
  300. }
  301. return rs;
  302. }
  303.  
  304. //重试
  305. async function retry(asyncRequest) {
  306. var times=2
  307. log("尝试调用"+asyncRequest)
  308. while(!await asyncRequest()){
  309. log("等待500ms 再次尝试")
  310. await sleep(500)
  311. }
  312. return true;
  313. }
  314. //满意度评测默认没问题
  315. function autoCheck(){
  316. var eleArr = document.getElementsByTagName('input');
  317. var rs=false
  318. for( var i=0; i<10; i++ ){
  319. eleArr[i].click()
  320. }
  321. clickTag('input','没问题',false)
  322. }
  323. function shuffle(array){
  324. let res = [], random;
  325. while(array.length>0){
  326. random = Math.floor(Math.random()*array.length);
  327. res.push(array[random]);
  328. array.splice(random, 1);
  329. }
  330. return res;
  331. }
  332. function eatWhat(){
  333.  
  334. if(!isUrlMatch(eatwhatUrl)){
  335. return;
  336. }
  337. var lunchArr=['肯德基','麦当劳','德克士','食其家','得来鲜','大米先生','荷特宝','谷田稻香','胡子大厨','饺子','张拉拉','成都你六姐','鱼你在一起','江西拌粉','老乡鸡']
  338. var dinnerArr=[]
  339.  
  340. var arr=shuffle(lunchArr)
  341. alert(arr[0]+","+arr[1]+","+arr[2] )
  342. }
  343.  
  344.  
  345.  
  346. $(document).ready(function() {
  347. //调用键盘编码,按了键盘回调keydown里的function(event)函数,event就是你按的那个按键的code码
  348.  
  349. // var 测试 = 80;//P
  350. // var 评测默认没问题 = 79;//O
  351. $(document).keydown(function(event){
  352. switch(event.keyCode){
  353. case 测试:
  354. // autoCheckArk();
  355. doTask();
  356. break;
  357. case 吃啥:
  358. // autoCheckArk();
  359. eatWhat();
  360. break;
  361. case 评测默认没问题:
  362. // autoCheck();
  363. break;
  364. }
  365. });
  366. });
  367.