auto jump

auto jump to target link

  1. // ==UserScript==
  2. // @name auto jump
  3. // @copyright 2020, xgame-0 (https://github.com/xgame-0/tamper-monkey-script)
  4. // @license MIT
  5. // @namespace https://github.com/xgame-0/tamper-monkey-script
  6. // @version 2024-11-19
  7. // @description auto jump to target link
  8. // @match *://news.17173.com/*
  9. // @match *://imagetwist.com/*
  10. // @match *://img599.net/*
  11. // @match *://imgbaron.com/*
  12. // @match *://imgsto.com/*
  13. // @match *://picbaron.com/*
  14. // @match *://picdollar.com/*
  15. // @match *://silverpic.com/*
  16. // @match *://viidii.info/*
  17. // @match *://redircdn.com/*
  18. // @match *://downsx.*/*
  19. // @match *://hgcdown.net/*
  20. // @grant none
  21. // ==/UserScript==
  22.  
  23. let CONFIGS = [{
  24. host: 'imagetwist.com',
  25. image: 'img.pic.img.img-responsive',
  26. }, {
  27. host: 'img599.net',
  28. image: '#image-viewer-container img',
  29. }, {
  30. host: ['imgbaron.com', 'imgsto.com', 'picbaron.com', 'picdollar.com', 'silverpic.com'],
  31. image: 'img.pic',
  32. click: 'form input[type=submit]',
  33. }, {
  34. host: ['viidii.info', 'redircdn.com'],
  35. param: ['url', 'src'],
  36. }, {
  37. host: 'news.17173.com',
  38. func: function () {
  39. let href = window.location.href;
  40. let url = href.replace(/_[0-9]*\.(s?html)/, '_all.$1');
  41. if (url != href) {
  42. window.location = url;
  43. return true
  44. }
  45. },
  46. }, {
  47. host: ['downsx.net', 'downsx.rocks', 'downsx.pw', 'downsx.club', 'hgcdown.net'],
  48. func: function () {
  49. let e = document.querySelector('.uk-width-1-1.text-center');
  50. let res = e.innerText.match(/\d+/);
  51. if (!res || res.length === 0) {
  52. return;
  53. }
  54. let size = +res[0];
  55. if (!size) {
  56. return;
  57. }
  58. size = calcBytes(size);
  59. let html = e.innerHTML.replace(/\d+\s*\(Bytes\)/, size);
  60. console.log(html);
  61. e.innerHTML = html;
  62. },
  63. }, {
  64. host: 'imgrock.pw',
  65. image: 'img[onload="scaleImg(this)"]',
  66. func: function () {
  67. setInterval(function () {
  68. let e1 = document.querySelectorAll('input[type=button]');
  69. e1.forEach((v, i) => {
  70. console.log('click:', v);
  71. v && v.click && v.click();
  72. });
  73.  
  74. let e2 = document.querySelector('button.btn_blue');
  75. console.log('click:', e2);
  76. e2 && e2.click && e2.click();
  77. }, 500);
  78. },
  79. }];
  80.  
  81. function calcBytes(n) {
  82. let u = 'B';
  83. if (n >= 1024) {
  84. n /= 1024;
  85. u = 'KiB';
  86. }
  87. if (n >= 1024) {
  88. n /= 1024;
  89. u = 'MiB';
  90. }
  91. if (n >= 1024) {
  92. n /= 1024;
  93. u = 'GiB';
  94. }
  95. return n.toFixed(2) + ' ' + u;
  96. }
  97.  
  98. function checkConfigHost(cfgHost) {
  99. if (Array.isArray(cfgHost)) {
  100. for (let i in cfgHost) {
  101. if (checkConfigHost(cfgHost[i])) {
  102. return true;
  103. }
  104. }
  105. return false
  106. }
  107.  
  108. let host = window.location.host;
  109. return cfgHost && host.indexOf(cfgHost) >= 0
  110. }
  111.  
  112. function getConfig() {
  113. let res = [];
  114. for (let i in CONFIGS) {
  115. let cfg = CONFIGS[i];
  116. if (checkConfigHost(cfg.host)) {
  117. res.push(cfg)
  118. }
  119. }
  120. return res;
  121. }
  122.  
  123. function doImage(selector) {
  124. if (Array.isArray(selector)) {
  125. let r = false;
  126. selector.forEach((v, i) => {
  127. r = r || doImage(v);
  128. });
  129. return r;
  130. }
  131. let e = document.querySelector(selector);
  132. if (e && e.src) {
  133. console.log('goto image src. selector:', selector, ', url:', e.src)
  134. window.location = e.src;
  135. return true
  136. }
  137. }
  138.  
  139. function doClick(selector) {
  140. if (Array.isArray(selector)) {
  141. let r = false;
  142. selector.forEach((v, i) => {
  143. r = r || doClick(v);
  144. });
  145. return r;
  146. }
  147. let e = document.querySelector(selector);
  148. if (e && e.click) {
  149. console.log('goto click. selector:', selector)
  150. e.click();
  151. return true;
  152. }
  153. }
  154.  
  155. let PARAMS = null;
  156.  
  157. function doParam(param) {
  158. PARAMS = PARAMS || new URLSearchParams(window.location.search.substr(1))
  159. let params = PARAMS;
  160. if (Array.isArray(param)) {
  161. let r = false;
  162. param.every((v, i) => {
  163. r = r || doParam(v);
  164. });
  165. return r;
  166. }
  167. let url = params.get(param);
  168. console.log(param, url);
  169. if (url && url != 'undefined') {
  170. console.log('goto param url. param:', param, ', url:', url)
  171. window.location = url;
  172. return true;
  173. }
  174. }
  175.  
  176. function doFunc(func) {
  177. if (Array.isArray(func)) {
  178. let r = false;
  179. func.every((v, i) => {
  180. r = r || doFunc(v);
  181. });
  182. return r;
  183. }
  184. return func();
  185. }
  186.  
  187. function main() {
  188. let cfgs = getConfig() || [];
  189. console.log('host:', window.location.host, ', cfgs:', cfgs)
  190.  
  191. for (let i in cfgs) {
  192. let cfg = cfgs[i]
  193. console.log('cfg:', cfg);
  194. let r = false;
  195. r = r || cfg.image && doImage(cfg.image);
  196. r = r || cfg.click && doClick(cfg.click);
  197. r = r || cfg.param && doParam(cfg.param);
  198. r = r || cfg.func && doFunc(cfg.func);
  199. }
  200. }
  201.  
  202. if (['complete', 'loaded', 'interactive'].indexOf(document.readyState) !== -1) {
  203. main();
  204. } else {
  205. window.addEventListener('DOMContentLoaded', main);
  206. }