🏠 Home 

auto write card info

none


Install this script?
  1. // ==UserScript==
  2. // @name auto write card info
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.12
  5. // @description none
  6. // @author kinger
  7. // @match https://checkout.stripe.com/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11. //TODO:添加根据国家地区自动填写地址,名称自动填写zhiyang
  12. (function() {
  13. 'use strict';
  14. console.log('银行卡自动填写脚本已启动');
  15. //对输入框中的内容进行处理
  16. function dowithInputText(text)
  17. {
  18. //将所有的/替换为|
  19. text = text.replace(/\//g, '|');
  20. //正则匹配所有的CVV
  21. let matches = text.match(/\d{16}\|(\d{1}|\d{2})\|(\d{2}|\d{4})\|(\d{3}|\d{4})/g);
  22. return matches?.join('\n') || text;
  23. }
  24. // 创建面板函数
  25. function createPanel() {
  26. // 检查面板是否已存在
  27. if (document.getElementById('autofill-panel')) {
  28. console.log('面板已存在,跳过创建');
  29. return;
  30. }
  31. // 创建面板
  32. var panel = document.createElement('div');
  33. panel.id = 'autofill-panel';
  34. panel.style.position = 'fixed';
  35. panel.style.top = '20px';
  36. panel.style.right = '20px';
  37. panel.style.width = '350px';
  38. panel.style.backgroundColor = 'white';
  39. panel.style.border = '2px solid #ccc';
  40. panel.style.padding = '15px';
  41. panel.style.zIndex = '10000';
  42. panel.style.boxShadow = '0 0 15px rgba(0,0,0,0.3)';
  43. panel.style.fontSize = '14px';
  44. panel.style.borderRadius = '8px';
  45. panel.style.opacity = '0.95';
  46. panel.style.fontFamily = 'Arial, sans-serif';
  47. // 创建标题
  48. var title = document.createElement('h3');
  49. title.textContent = '银行卡自动填写';
  50. title.style.marginTop = '0';
  51. title.style.marginBottom = '10px';
  52. panel.appendChild(title);
  53. // 创建文本区域
  54. var textarea = document.createElement('textarea');
  55. textarea.id = 'card-input';
  56. textarea.rows = 8;
  57. textarea.cols = 40;
  58. textarea.placeholder = '每行输入一张卡,格式:\n卡号|月|年|CVC';
  59. textarea.style.width = '100%';
  60. textarea.style.boxSizing = 'border-box';
  61. textarea.style.padding = '5px';
  62. textarea.style.fontSize = '14px';
  63. panel.appendChild(textarea);
  64. // 创建提交按钮
  65. var button = document.createElement('button');
  66. button.id = 'submit-button';
  67. button.textContent = '填入卡号';
  68. button.style.marginTop = '10px';
  69. button.style.width = '100%';
  70. button.style.padding = '10px';
  71. button.style.backgroundColor = '#4CAF50';
  72. button.style.color = 'white';
  73. button.style.border = 'none';
  74. button.style.cursor = 'pointer';
  75. button.style.fontSize = '16px';
  76. button.style.borderRadius = '4px';
  77. panel.appendChild(button);
  78. // 将面板添加到页面
  79. document.body.appendChild(panel);
  80. console.log('面板已创建并添加到页面');
  81. // 按钮事件
  82. button.addEventListener('click', async function() {
  83. var lines = dowithInputText(textarea.value.trim()).split('\n').filter(line => line.trim() !== '');
  84. if (lines.length === 0) {
  85. alert('没有可处理的卡号信息。');
  86. return;
  87. }
  88. var cardData = lines[0];
  89. // 移除已处理的卡号
  90. lines.shift();
  91. textarea.value = lines.join('\n');
  92. // 解析卡号信息
  93. var parts = cardData.split('|');
  94. if (parts.length !== 4) {
  95. alert('卡号格式不正确,应为:卡号|月|年|CVC');
  96. return;
  97. }
  98. var cardNumber = parts[0].trim();
  99. var month = parts[1].trim();
  100. var year = parts[2].trim();
  101. var cvc = parts[3].trim();
  102. var name = 'zhi yang'
  103. //如果年份是4位,则取后两位
  104. if (year.length === 4) year = year.slice(-2);
  105. console.log(`填入卡号信息:${cardNumber} | ${month}/${year} | ${cvc}`);
  106. var cardNumberField = document.getElementById('cardNumber');
  107. var cardExpiryField = document.getElementById('cardExpiry');
  108. var cardCvcField = document.getElementById('cardCvc');
  109. var billingNameField = document.getElementById("billingName");
  110. if (cardNumberField && cardExpiryField && cardCvcField && billingNameField) {
  111. try {
  112. await setNativeValue(cardNumberField, cardNumber);
  113. console.log('卡号已填写');
  114. await setNativeValue(cardExpiryField, `${month}/${year}`);
  115. console.log('到期日已填写');
  116. await setNativeValue(cardCvcField, cvc);
  117. console.log('CVC已填写');
  118. await setNativeValue(billingNameField, name);
  119. console.log('name已填写');
  120. //alert('卡号信息已填入表单。');
  121. } catch (error) {
  122. console.error('填写表单时出错:', error);
  123. alert('填写表单时出错,请检查控制台日志。');
  124. }
  125. } else {
  126. console.error('未找到表单字段,请确认页面是否正确。');
  127. alert('未找到表单字段,请确认页面是否正确。');
  128. }
  129. });
  130. }
  131. // 触发完整事件
  132. async function setNativeValue(element, value) {
  133. const valueSetter = Object.getOwnPropertyDescriptor(element.__proto__, 'value').set;
  134. if (valueSetter) {
  135. valueSetter.call(element, value);
  136. } else {
  137. element.value = value;
  138. }
  139. const inputEvent = new Event('input', { bubbles: true });
  140. element.dispatchEvent(inputEvent);
  141. const changeEvent = new Event('change', { bubbles: true });
  142. element.dispatchEvent(changeEvent);
  143. const blurEvent = new Event('blur', { bubbles: true });
  144. element.dispatchEvent(blurEvent);
  145. //insure tbe event finish
  146. await delay(50);
  147. }
  148. // delay
  149. function delay(ms) {
  150. return new Promise(resolve => setTimeout(resolve, ms));
  151. }
  152. // listen DOM
  153. var observer = new MutationObserver(function(mutations, me) {
  154. // check
  155. if (document.getElementById('cardNumber') && document.getElementById('cardExpiry') && document.getElementById('cardCvc') && document.getElementById("billingName")) {
  156. console.log('create ui');
  157. createPanel();
  158. me.disconnect(); // stop listen
  159. return;
  160. }
  161. });
  162. // listening
  163. observer.observe(document, {
  164. childList: true,
  165. subtree: true
  166. });
  167. })();