[Premium] Firefaucet.win

Dayli Bonus/Faucet Roll/Level Rewards/Dayli Tasks/Shortlinks/PTC

  1. // ==UserScript==
  2. // @name [Premium] Firefaucet.win
  3. // @tag Faucet
  4. // @namespace https://gf.qytechs.cn/users/1162863
  5. // @version 1.4.1
  6. // @description Dayli Bonus/Faucet Roll/Level Rewards/Dayli Tasks/Shortlinks/PTC
  7. // @author Andrewblood
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=firefaucet.win
  9. // @match *://*.firefaucet.win/*
  10. // @grant GM_addStyle
  11. // @grant GM_setValue
  12. // @grant GM_getValue
  13. // @grant window.focus
  14. // @grant window.close
  15. // @grant unsafeWindow
  16. // @antifeature referral-link Referral-Link is in this Script integrated.
  17. // @license Copyright Andrewblood
  18. // ==/UserScript==
  19.  
  20. (function() {
  21. 'use strict';
  22.  
  23. // CSS-Stil für das Overlay
  24. var overlayStyle = `
  25. #overlay {
  26. position: fixed !important;
  27. left: 10px !important; /* Abstand vom linken Rand */
  28. bottom: 10px !important; /* Abstand vom unteren Rand */
  29. width: 300px !important; /* Breite des Overlays */
  30. height: 450px !important; /* Höhe des Overlays */
  31. background-color: rgba(0, 0, 0, 0.5) !important; /* Halbtransparentes Schwarz */
  32. color: white !important; /* Schriftfarbe Schwarz */
  33. padding: 10px !important;
  34. z-index: 9999 !important; /* Stellen Sie sicher, dass das Overlay oben liegt */
  35. font-size: 16px !important; /* Schriftgröße 16px */
  36. display: flex;
  37. flex-direction: column; /* Überschrift und Inhalt untereinander */
  38. }
  39.  
  40. #overlay h2 {
  41. font-size: 20px; /* Größe des h2-Titels */
  42. margin-bottom: 20px; /* Abstand nach unten */
  43. text-align: center; /* Überschrift zentriert */
  44. }
  45.  
  46. #status {
  47. font-size: 16px; /* Gleiche Größe wie die Schalter */
  48. color: #2ed573; /* Hellblau wie der Button */
  49. text-align: center; /* Vertikal zentriert */
  50. margin-top: -10px; /* 5px näher zur Überschrift */
  51. margin-bottom: 10px; /* 5px Abstand nach unten */
  52. }
  53.  
  54. .checkbox-container {
  55. display: flex;
  56. align-items: center; /* Vertikal zentriert */
  57. margin-left: 40px; /* Abstand vom linken Rand */
  58. margin-bottom: 5px; /* Abstand nach unten */
  59. }
  60.  
  61. label {
  62. color: white !important;
  63. }
  64.  
  65. .checkbox-container input[type="checkbox"] {
  66. margin-right: 5px; /* Abstand zwischen Checkbox und Text */
  67. }
  68. #overlay button {
  69. margin-top: 10px;
  70. margin-left: 40px;
  71. margin-right: 40px;
  72. background-color: #2ed573;
  73. color: white;
  74. border: none;
  75. padding: 10px 20px;
  76. font-size: 14px;
  77. cursor: pointer;
  78. border-radius: 5px;
  79. transition: background-color 0.3s;
  80. text-align: center;
  81. }
  82.  
  83. #overlay button:hover {
  84. background-color: #7fffd4;
  85. }
  86. #info-overlay {
  87. position: fixed;
  88. top: 50%;
  89. left: 50%;
  90. transform: translate(-50%, -50%);
  91. width: 80%;
  92. height: 80%;
  93. background-color: rgba(0, 0, 0, 0.8);
  94. color: white;
  95. text-align: center;
  96. z-index: 99999;
  97. padding: 20px;
  98. display: none;
  99. overflow-y: auto;
  100. }
  101.  
  102. #info-overlay h2 {
  103. font-size: 28px !important;
  104. text-align: center;
  105. color: white;
  106. }
  107.  
  108. #info-overlay a {
  109. color: #2ed573;
  110. }
  111.  
  112. .imageOverlay {
  113. position: fixed;
  114. z-index: 9999;
  115. padding: 10px;
  116. border-radius: 5px;
  117. }
  118. .imageOverlay.original {
  119. top: 100px;
  120. left: 10px;
  121. background-color: rgba(0, 0, 0, 0.8);
  122. color: white;
  123. }
  124. .imageOverlay.processed {
  125. top: 200px;
  126. left: 10px;
  127. background-color: rgba(0, 0, 0, 0.8);
  128. color: white;
  129. }
  130. .imageOverlay img {
  131. max-width: 200px;
  132. max-height: 200px;
  133. width: auto;
  134. height: auto;
  135. }
  136. `;
  137.  
  138. // Füge den CSS-Stil hinzu
  139. GM_addStyle(overlayStyle);
  140.  
  141. // Erstelle das Overlay-Element mit innerHTML
  142. var overlay = document.createElement('div');
  143. overlay.id = 'overlay';
  144.  
  145. // Überschrift
  146. overlay.innerHTML = '<h2>Firefaucet Script from Andrewblood</h2>';
  147.  
  148. function setStatus(html) {
  149. Status.textContent = html;
  150. }
  151.  
  152. var Status = document.createElement('div');
  153. Status.id = 'status';
  154. overlay.appendChild(Status);
  155.  
  156. var daylibonusCheckboxContainer = document.createElement('div');
  157. daylibonusCheckboxContainer.classList.add('checkbox-container');
  158. daylibonusCheckboxContainer.innerHTML = `
  159. <input type="checkbox" id="daylibonus-checkbox"> <!-- Kästchen zum Ankreuzen -->
  160. <label for="daylibonus-checkbox">Dayli Bonus</label> <!-- Text neben dem Kästchen -->
  161. `;
  162. overlay.appendChild(daylibonusCheckboxContainer);
  163.  
  164. var faucetCheckboxContainer = document.createElement('div');
  165. faucetCheckboxContainer.classList.add('checkbox-container');
  166. faucetCheckboxContainer.innerHTML = `
  167. <input type="checkbox" id="faucet-checkbox"> <!-- Kästchen zum Ankreuzen -->
  168. <label for="faucet-checkbox">Faucet</label> <!-- Text neben dem Kästchen -->
  169. `;
  170. overlay.appendChild(faucetCheckboxContainer);
  171.  
  172. var levelrewardCheckboxContainer = document.createElement('div');
  173. levelrewardCheckboxContainer.classList.add('checkbox-container');
  174. levelrewardCheckboxContainer.innerHTML = `
  175. <input type="checkbox" id="levelreward-checkbox"> <!-- Kästchen zum Ankreuzen -->
  176. <label for="levelreward-checkbox">Level Reward</label> <!-- Text neben dem Kästchen -->
  177. `;
  178. overlay.appendChild(levelrewardCheckboxContainer);
  179.  
  180. var taskCheckboxContainer = document.createElement('div');
  181. taskCheckboxContainer.classList.add('checkbox-container');
  182. taskCheckboxContainer.innerHTML = `
  183. <input type="checkbox" id="task-checkbox"> <!-- Kästchen zum Ankreuzen -->
  184. <label for="task-checkbox">Dayli Tasks</label> <!-- Text neben dem Kästchen -->
  185. `;
  186. overlay.appendChild(taskCheckboxContainer);
  187.  
  188. var ptcCheckboxContainer = document.createElement('div');
  189. ptcCheckboxContainer.classList.add('checkbox-container');
  190. ptcCheckboxContainer.innerHTML = `
  191. <input type="checkbox" id="ptc-checkbox"> <!-- Kästchen zum Ankreuzen -->
  192. <label for="ptc-checkbox">PTC</label> <!-- Text neben dem Kästchen -->
  193. `;
  194. overlay.appendChild(ptcCheckboxContainer);
  195.  
  196. var shortlinkCheckboxContainer = document.createElement('div');
  197. shortlinkCheckboxContainer.classList.add('checkbox-container');
  198. shortlinkCheckboxContainer.innerHTML = `
  199. <input type="checkbox" id="shortlink-checkbox"> <!-- Kästchen zum Ankreuzen -->
  200. <label for="shortlink-checkbox">Shortlinks</label> <!-- Text neben dem Kästchen -->
  201. `;
  202. overlay.appendChild(shortlinkCheckboxContainer);
  203.  
  204. var offerwallCheckboxContainer = document.createElement('div');
  205. offerwallCheckboxContainer.classList.add('checkbox-container');
  206. offerwallCheckboxContainer.innerHTML = `
  207. <input type="checkbox" id="offerwall-checkbox"> <!-- Kästchen zum Ankreuzen -->
  208. <label for="offerwall-checkbox">Offerwall</label> <!-- Text neben dem Kästchen -->
  209. `;
  210. overlay.appendChild(offerwallCheckboxContainer);
  211.  
  212. var closeCheckboxContainer = document.createElement('div');
  213. closeCheckboxContainer.classList.add('checkbox-container');
  214. closeCheckboxContainer.innerHTML = `
  215. <input type="checkbox" id="close-checkbox"> <!-- Kästchen zum Ankreuzen -->
  216. <label for="close-checkbox">Close after work</label> <!-- Text neben dem Kästchen -->
  217. `;
  218. overlay.appendChild(closeCheckboxContainer);
  219.  
  220. var moreInfoButton = document.createElement('button');
  221. moreInfoButton.textContent = 'More Info';
  222. moreInfoButton.addEventListener('click', openInfoOverlay);
  223.  
  224. overlay.appendChild(moreInfoButton);
  225.  
  226. // Füge das Overlay dem Dokument hinzu
  227. document.body.appendChild(overlay);
  228.  
  229.  
  230.  
  231. var daylibonusCheckbox = document.getElementById('daylibonus-checkbox');
  232. daylibonusCheckbox.addEventListener('change', function() {
  233. GM_setValue('daylibonusStatus', daylibonusCheckbox.checked);
  234. });
  235.  
  236. var savedDayliBonusStatus = GM_getValue('daylibonusStatus');
  237. if (savedDayliBonusStatus !== undefined) {
  238. daylibonusCheckbox.checked = savedDayliBonusStatus;
  239. }
  240.  
  241. var faucetCheckbox = document.getElementById('faucet-checkbox');
  242. faucetCheckbox.addEventListener('change', function() {
  243. GM_setValue('faucetStatus', faucetCheckbox.checked);
  244. });
  245.  
  246. var savedFaucetStatus = GM_getValue('faucetStatus');
  247. if (savedFaucetStatus !== undefined) {
  248. faucetCheckbox.checked = savedFaucetStatus;
  249. }
  250.  
  251. var levelrewardCheckbox = document.getElementById('levelreward-checkbox');
  252. levelrewardCheckbox.addEventListener('change', function() {
  253. GM_setValue('levelrewardStatus', levelrewardCheckbox.checked);
  254. });
  255.  
  256. var savedLevelRewardStatus = GM_getValue('levelrewardStatus');
  257. if (savedLevelRewardStatus !== undefined) {
  258. levelrewardCheckbox.checked = savedLevelRewardStatus;
  259. }
  260.  
  261. var taskCheckbox = document.getElementById('task-checkbox');
  262. taskCheckbox.addEventListener('change', function() {
  263. GM_setValue('taskStatus', taskCheckbox.checked);
  264. });
  265.  
  266. var savedTaskStatus = GM_getValue('taskStatus');
  267. if (savedTaskStatus !== undefined) {
  268. taskCheckbox.checked = savedTaskStatus;
  269. }
  270.  
  271. var ptcCheckbox = document.getElementById('ptc-checkbox');
  272. ptcCheckbox.addEventListener('change', function() {
  273. GM_setValue('ptcStatus', ptcCheckbox.checked);
  274. });
  275.  
  276. var savedPtcStatus = GM_getValue('ptcStatus');
  277. if (savedPtcStatus !== undefined) {
  278. ptcCheckbox.checked = savedPtcStatus;
  279. }
  280.  
  281. var shortlinkCheckbox = document.getElementById('shortlink-checkbox');
  282. shortlinkCheckbox.addEventListener('change', function() {
  283. GM_setValue('shortlinkStatus', shortlinkCheckbox.checked);
  284. });
  285.  
  286. var savedShortlinkStatus = GM_getValue('shortlinkStatus');
  287. if (savedShortlinkStatus !== undefined) {
  288. shortlinkCheckbox.checked = savedShortlinkStatus;
  289. }
  290.  
  291. var offerwallCheckbox = document.getElementById('offerwall-checkbox');
  292. offerwallCheckbox.addEventListener('change', function() {
  293. GM_setValue('offerwallStatus', offerwallCheckbox.checked);
  294. });
  295.  
  296. var savedOfferwallStatus = GM_getValue('offerwallStatus');
  297. if (savedOfferwallStatus !== undefined) {
  298. offerwallCheckbox.checked = savedOfferwallStatus;
  299. }
  300.  
  301. var closeCheckbox = document.getElementById('close-checkbox');
  302. closeCheckbox.addEventListener('change', function() {
  303. GM_setValue('closeStatus', closeCheckbox.checked);
  304. });
  305.  
  306. var savedCloseStatus = GM_getValue('closeStatus');
  307. if (savedCloseStatus !== undefined) {
  308. closeCheckbox.checked = savedCloseStatus;
  309. }
  310.  
  311.  
  312. function openInfoOverlay() {
  313. var infoOverlay = document.getElementById('info-overlay');
  314. if (!infoOverlay) {
  315. infoOverlay = document.createElement('div');
  316. infoOverlay.id = 'info-overlay';
  317. infoOverlay.innerHTML = `
  318. <h2>Additional Information</h2>
  319. <p>
  320. The script looks at first on Dashboard if it any from that aviable and clicks on that: Dayli Bonus/Faucet Roll/Level Rewards/Dayli Tasks/PTC/Shortlinks <br>
  321. Shortlink Maker for the Shortlinks on this site you can download from my Greasyfork profile: <a href="https://gf.qytechs.cn/users/1162863" target="_blank">Andrewblood</a>. <br>
  322. Dayli Bonus/Faucet Roll: It choose the Captcha in this order if it is aviable: 1)Turnstile 2)ReCaptcha 3)HCaptcha <br>
  323. PTC: Captcha Solver for full automation integrated. <br>
  324. Shortlinks: On this page you can Unflag the sites and the script don't take the sites. <br>
  325. Offerwall: I have a script released for the site what opens. <br>
  326.  
  327. </p>
  328. <br>
  329.  
  330. <h2>Download Captcha Solver</h2>
  331. <p>
  332. <b>Google ReCaptcha:</b> RektCAPTCHA - <a href="https://github.com/Wikidepia/RektCAPTCHA" target="_blank">Install Here</a><br>
  333. <b>Antibot Words:</b> AB Links Solver - <a href="https://gf.qytechs.cn/de/scripts/459453-ab-links-solver" target="_blank">Install Here</a><br>
  334. <b>Cf-Turnstile:</b> Captcha Solver - <a href="https://github.com/MrAndrewBlood/Captcha-Solver" target="_blank">Install Here</a><br>
  335. </p>
  336. <br>
  337.  
  338. <h2>Support</h2>
  339. <p>
  340. If you have any questions or need assistance, don't hesitate to reach out the creator and supporter, <a href="https://gf.qytechs.cn/users/1162863" target="_blank">Andrewblood</a>.<br>
  341. </p>
  342. <br>
  343.  
  344. <h2>Privacy Policy</h2>
  345. <p>
  346. This script stores user data locally within TamperMonkey and is exclusively used for script functionality.<br>
  347. It is not shared with the script creator or third parties.<br>
  348. </p>
  349. `;
  350. document.body.appendChild(infoOverlay);
  351. }
  352. infoOverlay.style.display = 'block';
  353.  
  354. document.addEventListener('click', function(event) {
  355. if (!infoOverlay.contains(event.target) && event.target !== moreInfoButton) {
  356. closeInfoOverlay();
  357. }
  358. });
  359. }
  360.  
  361. function closeInfoOverlay() {
  362. var infoOverlay = document.getElementById('info-overlay');
  363. if (infoOverlay) {
  364. infoOverlay.style.display = 'none';
  365. }
  366. }
  367.  
  368.  
  369.  
  370. if (window.location.href.includes("register")) {
  371. function checkAndRedirect() {
  372. var referByCookie = getCookie("refer_by");
  373. if (referByCookie === "79539") {
  374. } else {
  375. window.location.href = "https://firefaucet.win/ref/79539";
  376. }
  377. }
  378.  
  379. function getCookie(name) {
  380. var value = "; " + document.cookie;
  381. var parts = value.split("; " + name + "=");
  382. if (parts.length == 2) return parts.pop().split(";").shift();
  383. }
  384.  
  385. checkAndRedirect();
  386. }
  387.  
  388.  
  389. setStatus('Script started.');
  390.  
  391.  
  392. if (window.location.href === "https://firefaucet.win/") {
  393. setStatus('Search and make the next activated step.');
  394. const dailyBonus = document.querySelector(".btn-flat.waves-effect.waves-dark");
  395. const dailyBonusDisabled = document.querySelector("#disabled");
  396. const faucet = document.querySelector("#faucet_btn");
  397. const taskButton = document.querySelector(".dashboard-action-btns > a:nth-child(6)");
  398. const taskValue = document.querySelector("#data__tasks_available_to_collect");
  399. const ptc = document.querySelector("#ptc-btn");
  400. const offerwall = document.querySelector("#offerwall-btn");
  401. const shortlinks = document.querySelector(".dashboard-action-btns > a:nth-child(1)");
  402. const reward = document.querySelector(".level-reward-section > div:nth-child(2) > a");
  403.  
  404. setTimeout(function () {
  405. if (savedDayliBonusStatus && dailyBonus && !dailyBonusDisabled) {
  406. dailyBonus.click();
  407. } else if (savedFaucetStatus && faucet && !faucet.innerText.includes('s')) {
  408. faucet.click();
  409. } else if (savedLevelRewardStatus && reward && reward.innerText.includes('Claim')) {
  410. reward.click();
  411. } else if (savedTaskStatus && taskButton && taskValue.innerText > 0) {
  412. taskButton.click();
  413. } else if (savedPtcStatus && ptc && !ptc.innerText.includes('0')) {
  414. ptc.click();
  415. } else if (savedShortlinkStatus && document.referrer !== "https://firefaucet.win/shortlinks" && document.referrer !== "https://firefaucet.win/offerwalls/bitcotasks/") {
  416. shortlinks.click();
  417. } else if (savedOfferwallStatus && document.referrer !== "https://firefaucet.win/offerwalls/bitcotasks/") {
  418. offerwall.click();
  419. } else if (savedCloseStatus) {
  420. setStatus('Close the site in 10 seconds.');
  421. setTimeout(function() {
  422. window.close();
  423. }, 1000*10);
  424. } else {
  425. setStatus('Reload in 30 minutes.');
  426. setTimeout(function() {
  427. window.location.reload();
  428. }, 1000*60*30);
  429. }
  430. }, 3000);
  431.  
  432. }
  433.  
  434. if (savedDayliBonusStatus && window.location.href === ("https://firefaucet.win/daily/")) {
  435.  
  436. setStatus('Make the daily Bonus.');
  437.  
  438. if (document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > a > button")){
  439. document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > a > button").click()
  440. }
  441.  
  442. if (document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > form > div:nth-child(2)").innerText.includes('reCAPTCHA')){
  443. document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > form > div:nth-child(2) > label:nth-child(2)").click()
  444. }
  445.  
  446. const selectturnstile = document.querySelector("#select-turnstile");
  447. const selectrecaptcha = document.querySelector("#select-recaptcha");
  448. const selecthcaptcha = document.querySelector("#select-hcaptcha");
  449.  
  450.  
  451. if (selectturnstile) {
  452. selectturnstile.click();
  453. } else if (selectrecaptcha) {
  454. selectrecaptcha.click();
  455. } else if (selecthcaptcha) {
  456. selecthcaptcha.click();
  457. }
  458.  
  459. setInterval(function() {
  460.  
  461. const daylibonus = document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > form > button");
  462.  
  463. if (document.querySelector("body > div.row > div.col.s12.m12.l6 > div > center > form > input[type=hidden]").value.length > 0) {
  464. daylibonus.click();
  465. }
  466. }, 3000);
  467.  
  468. }
  469.  
  470. if (savedFaucetStatus && window.location.href.includes("/faucet")) {
  471. setStatus('Make the Faucet.');
  472. const reward = document.querySelector("#get_reward_button")
  473. const selectturnstile = document.querySelector("#select-turnstile");
  474. const selecthcaptcha = document.querySelector("#select-hcaptcha");
  475. const selectrecaptcha = document.querySelector("#select-recaptcha");
  476.  
  477.  
  478. if (!selectturnstile && !selecthcaptcha && !selectrecaptcha) {
  479. reward.click();
  480. }
  481.  
  482. if (selectturnstile) {
  483. selectturnstile.click()
  484. } else if (selectrecaptcha) {
  485. selectrecaptcha.click();
  486. } else if (selecthcaptcha) {
  487. selecthcaptcha.click();
  488. }
  489.  
  490. setInterval(function() {
  491. const turnstileElement = document.querySelector("#captcha-turnstile");
  492. const recaptchaElement = document.querySelector("#captcha-recaptcha");
  493. const hcaptchaElement = document.querySelector("#captcha-hcaptcha")
  494.  
  495. const turnstileResponse = document.querySelector('input[name="cf-turnstile-response"]');
  496. const recaptchaResponse = document.querySelector("#g-recaptcha-response");
  497. const hcaptchaResponse = document.querySelector('[name="h-captcha-response"]');
  498.  
  499. if (turnstileElement && turnstileElement.offsetParent !== null && turnstileResponse.value.length > 0) {
  500. reward.click();
  501. }
  502. else if (recaptchaElement && recaptchaElement.offsetParent !== null && recaptchaResponse.value.length > 0) {
  503. reward.click();
  504. }
  505. else if (hcaptchaElement && hcaptchaElement.offsetParent !== null && hcaptchaResponse.value.length > 0) {
  506. reward.click();
  507. }
  508. }, 3000);
  509. }
  510.  
  511. if (savedLevelRewardStatus && window.location.href.includes("/levels")) {
  512. setStatus('Take the level Bonus.');
  513. const collect = document.querySelector(".z-depth-1 > table > tbody > tr:nth-child(1) > th:nth-child(4) > a")
  514.  
  515. if (collect && collect.innerText.includes("Collect")) {
  516. collect.click();
  517. }
  518. else {
  519. window.location.replace("https://firefaucet.win/");
  520. }
  521. }
  522.  
  523. if (savedTaskStatus && window.location.href.includes("/tasks")) {
  524. setStatus('Take the daily task Bonus.');
  525.  
  526. var elements = document.getElementsByClassName("bi bi-clipboard-check f-14");
  527.  
  528. function clickElementsWithDelay(index) {
  529. if (index < elements.length) {
  530. elements[index].click();
  531. setTimeout(function() {
  532. clickElementsWithDelay(index + 1);
  533. }, 3000);
  534. } else {
  535. window.location.replace("https://firefaucet.win/");
  536. }
  537. }
  538. clickElementsWithDelay(0);
  539. }
  540.  
  541. if (savedPtcStatus) {
  542. if (window.location.href === "https://firefaucet.win/ptc/" || window.location.href === "https://firefaucet.win/ptc/#!") {
  543. setStatus("Make the available PTC's.");
  544. const allviewed = document.querySelector(".card-panel > center:nth-child(11) > i")
  545. const allviewed2 = document.querySelector(".card-panel > center:nth-child(9) > i")
  546. const viewadvert = document.querySelector(".row > div:nth-child(1) > div > div:nth-child(3) > a")
  547. const sucessmessage = document.querySelector(".success_msg.hoverable")
  548.  
  549. if (viewadvert) {
  550. viewadvert.click();
  551. }
  552. else {
  553. window.location.replace("https://firefaucet.win/");
  554. }
  555. }
  556.  
  557. if (window.location.href.includes("https://firefaucet.win/viewptc")) {
  558.  
  559. // Create the original overlay div and add it to the document
  560. const originalOverlayDiv = document.createElement('div');
  561. originalOverlayDiv.classList.add('imageOverlay', 'original');
  562. document.body.appendChild(originalOverlayDiv);
  563.  
  564. // Create the processed overlay div and add it to the document
  565. const processedOverlayDiv = document.createElement('div');
  566. processedOverlayDiv.classList.add('imageOverlay', 'processed');
  567. document.body.appendChild(processedOverlayDiv);
  568.  
  569. // Create img elements for the original and processed images
  570. const originalImgElement = document.createElement('img');
  571. const processedImgElement = document.createElement('img');
  572. originalOverlayDiv.appendChild(originalImgElement);
  573. processedOverlayDiv.appendChild(processedImgElement);
  574.  
  575. // Load Tesseract.js script
  576. var tesseractScript = document.createElement('script');
  577. tesseractScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/tesseract.min.js';
  578. tesseractScript.onload = function() {
  579.  
  580. // Load Tesseract worker
  581. var workerScript = document.createElement('script');
  582. workerScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/worker.min.js';
  583. workerScript.onload = function() {
  584. setStatus("Tesseract.js loaded");
  585.  
  586. // OpenCV script
  587. var opencvScript = document.createElement('script');
  588. opencvScript.src = 'https://docs.opencv.org/4.5.5/opencv.js';
  589. opencvScript.onload = function() {
  590. setStatus("OpenCV.js loaded");
  591.  
  592. // Funktion zum Polling bis das Element sichtbar ist
  593. function waitForElement(selector, callback) {
  594. const element = document.querySelector(selector);
  595. if (element && element.offsetHeight > 1) {
  596. callback(element);
  597. } else {
  598. setTimeout(() => waitForElement(selector, callback), 1000);
  599. }
  600. }
  601.  
  602. // Funktion zum Laden und Bearbeiten des Bildes
  603. function loadAndProcessImage() {
  604.  
  605. // Überwachungsfunktion, die in bestimmten Intervallen prüft, ob das Bild vorhanden ist
  606. let interval = setInterval(function() {
  607. let imgElement = document.querySelector("#description > img");
  608. if (imgElement) {
  609. clearInterval(interval); // Stoppe das Intervall, wenn das Bild vorhanden ist
  610. setStatus('Picture found and start to edit the image.')
  611. originalImgElement.src = imgElement.src; // Zeige das Originalbild an
  612. processImage(imgElement); // Lade und bearbeite das Bild
  613. } else {
  614. setStatus('Wait for picture.')
  615. }
  616. }, 1000); // Überprüfe alle 1 Sekunde, ob das Bild vorhanden ist
  617. }
  618.  
  619. // Funktion zum Laden und Bearbeiten des Bildes
  620. function processImage(imgElement) {
  621. let src = cv.imread(imgElement);
  622.  
  623. // Schritt 0: Vergrößere das Bild
  624. let resized = new cv.Mat();
  625. let dsize = new cv.Size(src.cols * 4, src.rows * 4); // Verdreifache die Größe des Bildes
  626. cv.resize(src, resized, dsize, 0, 0, cv.INTER_LINEAR);
  627.  
  628. let dst = new cv.Mat();
  629. let M = cv.Mat.ones(5, 5, cv.CV_8U);
  630. let anchor = new cv.Point(-1, -1);
  631.  
  632. // Schritt 1: Ändere die Schriftfarbe auf Weiß und den Hintergrund auf Schwarz
  633. cv.cvtColor(resized, dst, cv.COLOR_RGB2GRAY);
  634. cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
  635.  
  636. // Schritt 2: Verwende Morphologie-Operationen, um das Bild zu bearbeiten
  637. cv.dilate(dst, dst, M, anchor, 2, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue());
  638. // cv.erode(dst, dst, M, anchor, 1, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue());
  639.  
  640. // Schritt 3: Konvertiere das bearbeitete Bild zurück in ein DOM-Element
  641. let canvas = document.createElement('canvas');
  642. cv.imshow(canvas, dst);
  643. let manipulatedImageSrc = canvas.toDataURL();
  644.  
  645. // Füge das bearbeitete Bild dem Overlay-DIV hinzu
  646. processedImgElement.src = manipulatedImageSrc;
  647.  
  648. // Texterkennung mit Tesseract.js
  649. Tesseract.recognize(
  650. manipulatedImageSrc,
  651. 'eng',
  652. {
  653. logger: m => setStatus("Tesseract Log:", m),
  654. psm: 7,
  655. oem: 3,
  656. tessedit_char_whitelist: "0123456789"
  657. }
  658. ).then(({ data: { text } }) => {
  659. setStatus("Text from teseract:", text);
  660.  
  661. // Filtere nur Zahlen von 0 bis 9 aus dem erkannten Text
  662. const filteredText = text.replace(/[^0-9]/g, '');
  663.  
  664. setStatus('Regonized Numbers: ' + filteredText)
  665.  
  666. var textField = document.querySelector("#description > input.captcha-input");
  667.  
  668. // Überprüfe, ob die Länge des Textes korrekt ist
  669. if (filteredText.length === 4) {
  670. textField.value = filteredText;
  671.  
  672. } else {
  673. location.reload();
  674. }
  675. });
  676.  
  677. // Bereinige Ressourcen
  678. src.delete();
  679. dst.delete();
  680. M.delete();
  681. resized.delete();
  682. }
  683.  
  684. // Starte das Laden und Bearbeiten des Bildes
  685. loadAndProcessImage();
  686. };
  687. document.head.appendChild(opencvScript);
  688. };
  689. document.head.appendChild(workerScript);
  690. };
  691. document.head.appendChild(tesseractScript);
  692.  
  693. setInterval(function () {
  694. if (document.querySelector("#description > input.captcha-input").value.length === 4 && document.querySelector("#submit-button > i").offsetHeight > 1){
  695. document.querySelector("#submit-button > i").click();
  696. setTimeout(function() {
  697. window.close();
  698. }, 200);
  699. } else {
  700. }
  701. }, 1000);
  702. }
  703. }
  704.  
  705. if (savedOfferwallStatus && window.location.href.includes("offerwall")) {
  706. document.querySelector("body > div.row > div.col.s12.l12.xl8 > div.card-panel.card-limited-max-width > div:nth-child(8) > a").click();
  707. document.querySelector("#bitcotasks > div > div > a").click();
  708. window.location.replace("https://firefaucet.win/");
  709. }
  710.  
  711. if (savedShortlinkStatus && window.location.href.includes("/shortlinks")) {
  712. setStatus('Make the unflagged Shortlinks.');
  713.  
  714. let helpers = {
  715. typer: function(inputElm, value) {
  716. let lastValue = inputElm.value;
  717. inputElm.value = value;
  718. let event = new Event('input', { bubbles: true });
  719. event.simulated = true;
  720. let tracker = inputElm._valueTracker;
  721. if (tracker) {
  722. tracker.setValue(lastValue);
  723. }
  724. inputElm.dispatchEvent(event);
  725. },
  726.  
  727. triggerMouseEvent: function(elm, eventType) {
  728. let clickEvent = document.createEvent('MouseEvents');
  729. clickEvent.initEvent(eventType, true, true);
  730. elm.dispatchEvent(clickEvent);
  731. },
  732.  
  733. alternativeClick: function(elm) {
  734. helpers.triggerMouseEvent(elm, "mouseover");
  735. helpers.triggerMouseEvent(elm, "mousedown");
  736. helpers.triggerMouseEvent(elm, "mouseup");
  737. helpers.triggerMouseEvent(elm, "click");
  738. }
  739. };
  740.  
  741. function getRandomNumber(min, max) {
  742. return Math.floor(Math.random() * (max - min) + min);
  743. }
  744.  
  745. function randomDisplayNumber() {
  746. var screenWidth = window.innerWidth;
  747. var screenHeight = window.innerHeight;
  748.  
  749. var randomX = getRandomNumber(0, screenWidth);
  750. var randomY = getRandomNumber(0, screenHeight);
  751.  
  752. return { x: randomX, y: randomY };
  753. }
  754.  
  755. function moveMouseTo(x, y) {
  756. var event = new MouseEvent('mousemove', {
  757. bubbles: true,
  758. cancelable: true,
  759. view: document.defaultView,
  760. clientX: x,
  761. clientY: y
  762. });
  763. document.dispatchEvent(event);
  764. }
  765.  
  766. function selectLinks(selectorPrefix, startIndex) {
  767. let links = [];
  768. for (let i = startIndex; i < startIndex + 10; i++) {
  769. let link = document.querySelector(`${selectorPrefix} form:nth-child(${i}) button[type='submit']`);
  770. links.push(link);
  771. }
  772. return links;
  773. }
  774.  
  775. function clickFirstValidLink(links) {
  776. for (let i = 0; i < links.length; i++) {
  777. let link = links[i];
  778. if (link && link.innerText.includes(i + 1)) {
  779. var randomPosition = randomDisplayNumber();
  780. moveMouseTo(randomPosition.x, randomPosition.y);
  781. helpers.alternativeClick(link);
  782. window.close();
  783. return;
  784. }
  785. }
  786. window.location.replace("https://firefaucet.win/");
  787. }
  788.  
  789.  
  790. // Überprüfe das Element mit der Klasse "success_msg.hoverable"
  791. let successMsg = document.querySelector(".success_msg.hoverable");
  792. let selectorPrefix = successMsg ? "body > div.row > div.col.s12.m12.l8 > div > div:nth-child(6) > div.sl-views-section" : "body > div.row > div.col.s12.m12.l8 > div > div:nth-child(5) > div.sl-views-section";
  793.  
  794. // Hauptcode
  795. let links = selectLinks(selectorPrefix, 1);
  796.  
  797. setTimeout(function () {
  798. clickFirstValidLink(links);
  799. }, 3000);
  800.  
  801. }
  802.  
  803.  
  804. })();

QingJ © 2025

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