Croxyproxy Improvement

Let you access what you need with your favorite IP address. The best tool to bypass a blockage of any web page (croxyproxy).

  1. // ==UserScript==
  2. // @name Croxyproxy Improvement
  3. // @namespace I need a financial help
  4. // @match https://www.croxyproxy.com/*
  5. // @grant GM_setValue
  6. // @grant GM_getValue
  7. // @run-at document-body
  8. // @noframes off
  9. // @version 1.0.9.24
  10. // @author is_competent
  11. // @compatible Chrome
  12. // @compatible Firefox
  13. // @license MIT
  14. // @description Let you access what you need with your favorite IP address. The best tool to bypass a blockage of any web page (croxyproxy).
  15. // ==/UserScript==
  16.  
  17. (() => {
  18. const localID = Number(GM_getValue('id')) || '';
  19. const localURL = GM_getValue('urls') || [];
  20.  
  21. const main_ = document.createElement('container');
  22. const help = document.createElement('div');
  23. const idInput = document.createElement('input');
  24. const parentHistory = document.createElement('span');
  25. const historyList = document.createElement('div');
  26. const urlInput = document.createElement('input');
  27.  
  28. idInput.placeholder = '# [40-300]';
  29. urlInput.placeholder = 'Url here';
  30. idInput.type = 'number';
  31. idInput.pattern = '[0-9]*';
  32. idInput.value = localID;
  33. urlInput.value = localURL[localURL.length - 1] || '';
  34.  
  35. idInput.onkeydown = enterEvt;
  36. urlInput.onkeydown = enterEvt;
  37. urlInput.onclick = clickEvt;
  38.  
  39. help.textContent = 'I need a financial help, BRO. (is_competent@proton.me)';
  40.  
  41. parentHistory.append(urlInput);
  42. parentHistory.append(historyList);
  43. main_.append(help);
  44. main_.append(idInput);
  45. main_.append(parentHistory);
  46.  
  47. document.querySelector('container')?.remove();
  48.  
  49. checkBody = setInterval(() => {
  50. if (!document.body)
  51. return;
  52. document.body.prepend(main_);
  53. clearInterval(checkBody);
  54.  
  55. })
  56.  
  57. function clickEvt(event) {
  58. const {
  59. target
  60. } = event;
  61.  
  62. const X = GM_getValue('urls') ?? [];
  63. const H = target.nextElementSibling;
  64. H.style.display = 'block';
  65. if (!H)
  66. return;
  67. H.textContent = '';
  68.  
  69. X.forEach(e => {
  70. const Q = document.createElement('item');
  71. Q.textContent = e;
  72. H.append(Q);
  73. });
  74. const keyboardEvent = new KeyboardEvent('keydown', {
  75. key: 'Enter',
  76. bubbles: true
  77. });
  78. H.onclick = (eventH) => {
  79. const C = eventH.target.textContent;
  80. target.value = C;
  81. target.dispatchEvent(keyboardEvent);
  82. H.style.display = 'none';
  83.  
  84. }
  85.  
  86. }
  87.  
  88. function enterEvt(event) {
  89. const {
  90. target
  91. } = event;
  92. const parent = target.closest('container');
  93. const idInput = parent.querySelector('input');
  94. const urlInput = parent.querySelector('span input');
  95.  
  96. if (!/enter/i.test(event.key))
  97. return;
  98.  
  99. const serverID = idInput?.value || '200';
  100. const urlTOGO = urlInput?.value || 'https://example.net/';
  101. const csrf = document.querySelector("#request > input[name=csrf]")?.value;
  102. if (!csrf) {
  103. alert('But I cannot continue, try on home page...');
  104. return;
  105. }
  106.  
  107. const X = GM_getValue('urls') ?? [];
  108. X.push(urlTOGO);
  109.  
  110. GM_setValue('id', serverID);
  111. GM_setValue('urls', [...new Set(X)]);
  112.  
  113. fetch("servers", {
  114. "headers": {
  115. "content-type": "application/x-www-form-urlencoded",
  116. },
  117. "referrerPolicy": "strict-origin-when-cross-origin",
  118. "body": `url=${ encodeURIComponent( urlTOGO ) }&csrf=${ csrf }`,
  119. "method": "POST"
  120. }).then(e => e.text()).then(e => {
  121. const parsedCSRF = /data-csrf=(\S+)/i.exec(e)[1].replaceAll(/"|"/g, '');
  122. document.querySelector('#xForm')?.remove();
  123. const form = `
  124. <form id="xForm" method="POST" action="/requests?fso="><input type="hidden" name="url" value="${ urlTOGO }"><input type="hidden" name="proxyServerId" value="${ serverID }"><input type="hidden" name="csrf" value="${ parsedCSRF }"><input type="hidden" name="demo" value="0"><input type="hidden" name="frontOrigin" value="https://www.croxyproxy.com"><input type=submit></form>`;
  125.  
  126. const container = document.querySelector('container');
  127. container.insertAdjacentHTML('beforeend', form);
  128.  
  129. // document.querySelector("body > form [type=submit]").click();
  130. // document.querySelector("body > form [type=submit]").submit();
  131. // document.querySelector("body > form").submit();
  132. });
  133.  
  134.  
  135. }
  136. const STYLE = document.createElement('STYLE');
  137. STYLE.textContent = `
  138. item:hover {
  139. opacity: .5;
  140. color: green;
  141. cursor: pointer;
  142. }
  143. item {
  144. display: block;
  145. }
  146. container {
  147. position: fixed;
  148. z-index: 10000;
  149. padding: 5px;
  150. backdrop-filter: blur(8px);
  151. }
  152. container span {
  153. display: initial;
  154. width: 100%;
  155. }
  156. container span div {
  157. position: static;
  158. display: none;
  159. background: lightblue;
  160. left: 50px;
  161. margin-left: 136px;
  162. border-radius: 0 0 8px 8px;
  163. padding: 5px;
  164. border: 1px solid;
  165. overflow: hidden;
  166. white-space: nowrap;
  167. user-select: none;
  168. }
  169. container form input[type=submit] {
  170. width: 100%;
  171. }
  172. container input[type='number'] {
  173. -moz-appearance:textfield;
  174. margin-right: 5px;
  175. width: 130px;
  176. }
  177. container input::-webkit-outer-spin-button,
  178. container input::-webkit-inner-spin-button {
  179. -webkit-appearance: none;
  180. }
  181. container span input {
  182. width: 300px;
  183. }
  184.  
  185. `;
  186.  
  187. document.head.append(STYLE);
  188. })();