GitHub Card Input

Automate GitHub Card Input

  1. // ==UserScript==
  2. // @name GitHub Card Input
  3. // @description Automate GitHub Card Input
  4. // @version 0.2
  5. // @license MIT
  6. // @author LD
  7. // @match https://www.zuora.com/apps/PublicHostedPageLite.do**
  8. // @match https://www.recaptcha.net/recaptcha/enterprise/anchor*
  9. // @grant none
  10. // @namespace https://greasyfork.org/users/1218336
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15.  
  16. function elementReady(selector) {
  17. console.log(selector);
  18. return new Promise((resolve, reject) => {
  19. let el = document.querySelector(selector);
  20. if (el) {
  21. resolve(el);
  22. }
  23. new MutationObserver((mutationRecords, observer) => {
  24. // Query for elements matching the specified selector
  25. Array.from(document.querySelectorAll(selector)).forEach((element) => {
  26. resolve(element);
  27. //Once we have resolved we don't need the observer anymore.
  28. observer.disconnect();
  29. });
  30. })
  31. .observe(document.documentElement, {
  32. childList: true,
  33. subtree: true
  34. });
  35. });
  36. }
  37.  
  38. function getRandomInt(min, max) {
  39. return Math.floor(Math.random() * (max - min + 1)) + min;
  40. }
  41.  
  42. function getRandomLength(length) {
  43. let min = Math.pow(10, length - 1);
  44. let max = Math.pow(10, length) - 1;
  45. return getRandomInt(min, max);
  46. }
  47.  
  48. function generateLastDigit(cardNumber) {
  49. var total = 0;
  50.  
  51. // Apply Luhn algorithm rules on the card number
  52. for (var i = 0; i < 15; i++) {
  53. var digit = parseInt(cardNumber.charAt(i));
  54.  
  55. if (i % 2 == 0) {
  56. digit *= 2;
  57. if (digit > 9) {
  58. digit -= 9;
  59. }
  60. }
  61. total += digit;
  62. }
  63.  
  64. // Generate the last digit such that the whole number passes Luhn check
  65. var lastDigit = (10 - (total % 10)) % 10;
  66.  
  67. return lastDigit;
  68. }
  69.  
  70. function generateCard(bin = null, month = null, year = null, cvv = null) {
  71. // 如果月份为null,则生成一个1到12之间的随机月份
  72. if (month === null) {
  73. month = getRandomInt(1, 12).toString();
  74. month = month.padStart(2, '0'); // 补全两位
  75. }
  76. // 如果年份为null,则生成一个当前年份到未来10年内的随机年份
  77. if (year === null) {
  78. const currentYear = new Date().getFullYear();
  79. year = getRandomInt(currentYear, currentYear + 10).toString();
  80. }
  81. // 如果cvv为null,则生成一个100到999之间的随机cvv码
  82. if (cvv === null) {
  83. cvv = getRandomLength(3);
  84. }
  85. if (bin) {
  86. bin += getRandomLength(15 - bin.length);
  87. } else {
  88. bin = getRandomLength(15);
  89. }
  90. bin += generateLastDigit(bin);
  91. // 将给定的 bin、month、year 和 cvv 拼接成指定的格式
  92. const card = `${bin}|${month}|${year}|${cvv}`;
  93. return card;
  94. }
  95.  
  96. function setForm(cardInfo) {
  97. let cardArr = cardInfo.split('|');
  98. let cardNumber = cardArr[0];
  99. let cardMonth = cardArr[1];
  100. let cardYear = cardArr[2];
  101. let cardSecurityCode = cardArr[3];
  102. elementReady("#input-creditCardNumber").then(() => {
  103. document.querySelector("#input-creditCardNumber").click();
  104. document.querySelector("#input-creditCardNumber").value = cardNumber;
  105. document.querySelector("#input-creditCardExpirationMonth").click();
  106. document.querySelector("#input-creditCardExpirationMonth").querySelector(
  107. `option[value='${cardMonth}']`).selected = true;
  108. document.querySelector("#input-creditCardExpirationYear").click();
  109. document.querySelector("#input-creditCardExpirationYear").querySelector(
  110. `option[value='${cardYear}']`).selected = true;
  111. document.querySelector("#input-cardSecurityCode").click();
  112. document.querySelector("#input-cardSecurityCode").value = cardSecurityCode;
  113. // 等待验证码加载完成
  114. setTimeout(function () {
  115. document.querySelector("#submitButton").click();
  116. }, 8000);
  117. var iframes = document.getElementsByTagName('iframe'); // 获取页面上所有的 iframe
  118. console.log(iframes)
  119. for (var i = 0; i < iframes.length; i++) {
  120. var iframe = iframes[i];
  121. // 判断 iframe 的 title,找到你想要的那个
  122. if (iframe.getAttribute('title') === 'reCAPTCHA') {
  123. iframe.onload = function () {
  124. // alert('子iframe已加载完毕!');
  125. document.querySelector("#submitButton").click();
  126. }
  127. break;
  128. }
  129. }
  130. });
  131. }
  132. // TODO 更改
  133. let cardInfo = generateCard("xxxxxxxx", "xx", "xxxx");
  134. console.log(cardInfo);
  135. setForm(cardInfo)
  136.  
  137. })();