JDbScript

提效gogogo!

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