Midjourney Auto Menu Call

减少两次鼠标操作

  1. // ==UserScript==
  2. // @name Midjourney Auto Menu Call
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description 减少两次鼠标操作
  6. // @author You
  7. // @match https://www.midjourney.com/*
  8. // @match https://nijijourney.com/*
  9. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  10. // @grant GM_registerMenuCommand
  11. // @grant GM_unregisterMenuCommand
  12. // @grant GM_setValue
  13. // @grant GM_getValue
  14. // @license MIT
  15. // ==/UserScript==
  16. var g_jobid;
  17. var g_curTag;
  18. var g_3dotbtn;
  19. var g_e_3dotbtn;
  20.  
  21. function isElement(obj) {
  22. return !!(obj && obj.nodeType === 1);
  23. }
  24.  
  25. function getRundomTimeGap()
  26. {
  27. return Math.random()*(300)+200;
  28. }
  29.  
  30. function timeout_callcopymenu()
  31. {
  32. var spans = document.getElementsByTagName("span");
  33. for(var i=0;i<spans.length;i++)
  34. {
  35. var spannode = spans[i];
  36. if(spannode.innerHTML=="Copy...")
  37. {
  38. console.log("get copy ndoe");
  39. //向上查找,定位关联的btn
  40. var node = spannode;
  41. while(true)
  42. {
  43. node = node.parentElement;
  44. if(node.tagName == "DIV" && node.hasAttribute("aria-labelledby") && node.getAttribute("aria-labelledby") == g_3dotbtn)
  45. {
  46. spannode.parentElement.click();
  47. break;
  48. }
  49. else if(node.tagName == "BODY")
  50. {
  51. break;
  52. }
  53. else if(node == null)
  54. {
  55. break;
  56. }
  57. }
  58. break;
  59. }
  60. }
  61. }
  62.  
  63. function timeout_click3dot()
  64. {
  65. if(isElement(g_e_3dotbtn) && g_e_3dotbtn.tagName == "BUTTON")
  66. {
  67. g_e_3dotbtn.click();
  68. setTimeout(timeout_callcopymenu,getRundomTimeGap());
  69. }
  70. }
  71.  
  72. function mouseoverUpdate(nodeParam)
  73. {
  74. var cEL = nodeParam.fromElement;
  75. var strTag = cEL.tagName;
  76. var clsName = cEL.className;
  77. // console.log("Tag:" + strTag +"\n"+"Cls:"+clsName);
  78.  
  79. var targetNode = cEL;
  80. var roleStr = "role";
  81. var btmStr ="relative w-full shrink-0 cursor-auto justify-self-end opacity-100 translate-y-0";
  82. var muStr = "data-popper-placement";
  83. while(true)
  84. {
  85. targetNode = targetNode.parentElement;
  86. if(targetNode == null)
  87. {
  88. g_curTag = null;
  89. break;
  90. }
  91. if(targetNode.tagName == "BODY")
  92. {
  93. g_curTag = null;
  94. break;
  95. }
  96. else if(targetNode.tagName == "DIV")
  97. {
  98. if(targetNode.className == btmStr)
  99. {
  100. // console.log("get btm div");
  101. while(true)
  102. {
  103. targetNode = targetNode.parentElement;
  104. if(targetNode.tagName == "DIV" && targetNode.hasAttribute(roleStr) && targetNode.getAttribute(roleStr) == "gridcell")
  105. {
  106. g_curTag = targetNode;
  107. break;
  108. }
  109. }
  110. break;
  111. }
  112. else if(targetNode.hasAttribute(roleStr) && targetNode.getAttribute(roleStr) == "gridcell")
  113. {
  114. break;
  115. }
  116. else if(targetNode.hasAttribute(muStr) && targetNode.getAttribute(muStr)=="top-end")
  117. {
  118. console.log("menu");
  119. var dvs = targetNode.getElementsByTagName("div");
  120. for(var i = 0;i<dvs.length;i++)
  121. {
  122. var dv = dvs[i];
  123. if(dv.hasAttribute("aria-labelledby"))
  124. {
  125. //
  126. if(dv.getAttribute("aria-labelledby") == g_3dotbtn)
  127. {
  128. //do nothing
  129. }
  130. else
  131. {
  132. console.log("change menu,clear all data");
  133. g_curTag = null;
  134. g_jobid = "";
  135. g_3dotbtn = "";
  136. g_e_3dotbtn = null;
  137. }
  138. break;
  139. }
  140. }
  141.  
  142. break;
  143. }
  144. }
  145. }
  146.  
  147. if(isElement(g_curTag))
  148. {
  149. var imgs = g_curTag.getElementsByTagName("img");
  150. for(var i = 0;i<imgs.length;i++)
  151. {
  152. var img = imgs[i];
  153. if(!img.hasAttribute("data-job-id"))
  154. continue;
  155. var oldjobid = g_jobid;
  156. g_jobid = img.getAttribute("data-job-id");
  157. // console.log(g_jobid);
  158. if(g_jobid == oldjobid)
  159. continue;
  160.  
  161. var btns = g_curTag.getElementsByTagName("button");
  162. for(var j = 0;j<btns.length;j++)
  163. {
  164. var btn = btns[j];
  165. if(!btn.getAttribute("title")=="Open Options")
  166. continue;
  167. g_3dotbtn = btn.parentElement.id;
  168. g_e_3dotbtn = btn;
  169. // console.log(g_e_3dotbtn);
  170. console.log("get data job id:"+g_jobid + "\n 3dot btn is: " + btn.parentElement.id);
  171. setTimeout(timeout_click3dot,getRundomTimeGap());
  172. break;
  173. }
  174. break;
  175. }
  176. }
  177. else
  178. {
  179. g_jobid = "";
  180. g_3dotbtn = "";
  181. g_e_3dotbtn = null;
  182. }
  183. }
  184.  
  185. var listenID;
  186. var unlistenID;
  187.  
  188. function openListen()
  189. {
  190. document.body.addEventListener("mouseover",mouseoverUpdate);
  191. GM_unregisterMenuCommand(listenID);//删除菜单
  192. unlistenID=GM_registerMenuCommand ("关闭监听",stopListen, "h");
  193. }
  194.  
  195. function stopListen()
  196. {
  197. document.body.removeEventListener("mouseover",mouseoverUpdate);
  198. GM_unregisterMenuCommand(unlistenID);//删除菜单
  199. listenID=GM_registerMenuCommand ("开启监听",openListen, "h");
  200. }
  201.  
  202. listenID=GM_registerMenuCommand ("开启监听",openListen, "h");
  203. (function() {
  204. 'use strict';
  205. // Your code here...
  206. console.log("my code.");
  207. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址