Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
588
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.95 KB | None | 0 0
  1. //屠龙0.0.2 版权归 “潮目 - Hypeeyes”所有,未经授权不得转发
  2. //Follow @Hypeeyes on twitter to get the latest update
  3.  
  4. (function () {
  5. let keyWord = '+box,+logo'; // +box,+logo,
  6. let categories = ["Jackets", "Coats", "Shirts", "Tops/Sweaters", "Sweatshirts", "Pants", "Shorts", "T-Shirts", "Hats", "Bags", "Accessories", "Shoes", "Skate"]
  7. // 0 -> "Jackets", 1 -> "Coats", 2-> "Shirts", 3 -> "Tops/Sweaters", 4 ->"Sweatshirts", 5->"Pants", 6->"Shorts", 7->"T-Shirts",
  8. //8-> "Hats", 9->"Bags", 10->"Accessories", 11->"Shoes", 12->"Skate"
  9. let category = categories[7];
  10. let preferredSize = 'any' // 尺码没有了会选择默认尺码
  11. let preferColor = 'any'; // 颜色没有了回选最后一个有货的,填any回选第一个颜色有货的
  12. let autoCheckout = false; // 自动结账,
  13. let checkout_delay = 0; // 结账延迟设置, 2500 = 2.5秒
  14.  
  15. //Address info
  16. let billing_name = "John Smith";
  17. let order_email = "john@sneakerfashionlove.com";
  18. let order_tel = "8045512009";
  19. let order_address = "123 supreme street";
  20. let order_billing_address_2 = "first floor";
  21. let order_billing_zip = "23139";
  22. let order_billing_city = "Richmond";
  23. let order_billing_state = "VA"; // 日本省份前面要加空格,
  24. let order_billing_country = "USA"; // USA, CANADA,EU:GB, FR 欧洲国家大写缩写
  25.  
  26. //Payment info
  27. let credit_card_type = "master"; // 日本代金填cod
  28. // 欧洲:visa, american_express, master, solo
  29. // 日本:visa, american_express, master, jcb, cod(代金)
  30. let cnb = "5000 1812 6487 1109";
  31. let month = "01";
  32. let year = "2024";
  33. let vval = "000";
  34.  
  35. //=======================================================================================================
  36.  
  37. let startTime = null;
  38. let respondJSON = null;
  39. let isNew = true;
  40. let item_selected = false;
  41.  
  42. let mobile_stock_api = "https://www.supremenewyork.com/mobile_stock.json";
  43. let event = document.createEvent('Event');
  44. event.initEvent('change', true, true);
  45.  
  46. let notifyHeader = document.createElement('p');
  47. notifyHeader.style.cssText = "padding-left:120px;margin: auto;width: 100%;background-color: #70de4c;";
  48. let refresh_count = 0;
  49. document.getElementsByTagName('header')[0].appendChild(notifyHeader);
  50.  
  51. let retryFetch = async (url, options=null, retry=0) => {
  52. if (retry >= 4) return Promise.resolve(1);
  53. let res = await fetch(url, options);
  54. if (res.status !== 200) {
  55. await sleep(Math.min(retry * 500, 2 * 1000));
  56. return await retryFetch(url, options, retry + 1);
  57. } else {
  58. return await res.json();
  59. }
  60. };
  61.  
  62. function matchKeyWord (itemName, keyWords) {
  63. let name = itemName.toLowerCase().trim();
  64. let keyWordsList = keyWords.toLowerCase().split(",");
  65. for (let i = 0; i < keyWordsList.length; i ++) {
  66. let word = keyWordsList[i].trim();
  67. if ((word.includes('+') && !name.includes(word.substr(1))) ||
  68. (word.includes('-') && name.includes(word.substr(1)))) {
  69. return false;
  70. }
  71. }
  72. return true;
  73. };
  74.  
  75. let sleep = (ms) => {
  76. return new Promise(resolve => setTimeout(resolve, ms));
  77. };
  78.  
  79. async function mobileAPIRefreshed(respond) {
  80. if (respond['products_and_categories'] == null || respond['products_and_categories']['new'] == null) {
  81. return false;
  82. }
  83. let newProducts = respond['products_and_categories']['new'];
  84. for (let index = 0; index < newProducts.length; index ++) {
  85. let item =newProducts[index];
  86. if (item != null && item['name'] != null && matchKeyWord(item['name'], keyWord)) {
  87. isNew = true;
  88. return true;
  89. }
  90. }
  91.  
  92. let categoryProduct = respond['products_and_categories'][category];
  93. if (categoryProduct != undefined) {
  94. for (let index = 0; index < categoryProduct.length; index ++) {
  95. let item =categoryProduct[index];
  96. if (item != null && item['name'] != null && matchKeyWord(item['name'], keyWord)) {
  97. isNew = false;
  98. return true;
  99. }
  100. }
  101. }
  102. return false;
  103. }
  104.  
  105. async function monitor() {
  106. if (!item_selected) {
  107. notifyHeader.innerHTML = '监测新的产品。。。 次数: ' + refresh_count;
  108. refresh_count ++;
  109. let refreshed = false;
  110.  
  111. let respond = await retryFetch(mobile_stock_api);
  112. refreshed = respond == null ? false : await mobileAPIRefreshed(respond);
  113. if (refreshed) {
  114. respondJSON = respond;
  115. startTime = new Date();
  116. console.log("Detect Page refreshed with mobile endpoint at: " + startTime.toISOString());
  117. notifyHeader.innerHTML = "新商品已经上线。。。如果页面没有跳转到商品页面请手动刷新并且重启程序。"
  118. window.location.href = isNew? 'https://www.supremenewyork.com/mobile/#categories/new' : ('https://www.supremenewyork.com/mobile/#categories/' + category);
  119. await sleep(300);
  120. start();
  121. return;
  122. } else {
  123. console.log("Not refreshed, retrying ...")
  124. await sleep(1000);
  125. await monitor();
  126. return;
  127. }
  128. }
  129. }
  130.  
  131.  
  132. let start = () => {
  133. console.log("start!!");
  134. let items = document.getElementsByClassName("name");
  135. let selectedItem = null;
  136. if (items.length > 0) {
  137. notifyHeader.innerHTML = "寻找相应物品中。。。如有卡顿,请手动点击商品图片。";
  138. for (item of items) {
  139. let name = item.innerHTML;
  140.  
  141. if (matchKeyWord(name, keyWord)) {
  142. startTime = new Date().getTime();
  143. selectedItem =item;
  144. selectedItem.click();
  145. break;
  146. }
  147. }
  148.  
  149. if (selectedItem !== null) {
  150. (function waitTillItemClick() {
  151. items = document.getElementsByClassName("name");
  152. if (items.length > 0) {
  153. console.log('wait item click ...');
  154. selectedItem.click();
  155. setTimeout(function(){ waitTillItemClick(); }, 150);
  156. } else {
  157. return;
  158. }
  159. })();
  160. } else {
  161. sleep(50).then(start);
  162. }
  163. } else {
  164. sleep(150).then(start);
  165. }
  166. }
  167.  
  168. (function waitTillArticlePageIsOpen() {
  169. console.log('wait item page ...');
  170. let atcBtn = document.getElementsByClassName("cart-button")[0];
  171. if (atcBtn) {
  172. addToCart();
  173. } else {
  174. setTimeout(function(){ waitTillArticlePageIsOpen(); }, 150);
  175. }
  176. return;
  177. })();
  178.  
  179.  
  180.  
  181. async function addToCart(){
  182. if (document.getElementById('cart-update').children[0].innerHTML === "remove") {
  183. checkout();
  184. return;
  185. }
  186. notifyHeader.innerHTML = "选择相应颜色中。。。";
  187. await chooseColor();
  188. notifyHeader.innerHTML = "颜色选择完毕。。。";
  189. await sleep(70);
  190. notifyHeader.innerHTML = "选择相应尺码中。。。";
  191. chooseSize();
  192. notifyHeader.innerHTML = "尺码选择完毕。。。";
  193. await sleep(70);
  194. let atcBtn = document.getElementsByClassName("cart-button")[0];
  195. atcBtn.click();
  196. item_selected = true;
  197.  
  198. (function waitTillCartUpdates() {
  199. let cart = document.getElementById("goto-cart-link").innerHTML;
  200. if (cart == '' || cart == 0) {
  201. setTimeout(function(){ waitTillCartUpdates(); }, 150);
  202. return;
  203. } else {
  204. // Click checkout button
  205. notifyHeader.innerHTML = "已经加入购物车";
  206. checkout()
  207. return;
  208. }
  209. })();
  210. }
  211.  
  212.  
  213. async function chooseColor() {
  214. let image;
  215. let url = "/shop/"+window.location.hash.split("/")[1]+".json";
  216. let res = await fetch(url);
  217. let myJson = await res.json();
  218. for (item of myJson.styles){
  219. let color = item.name;
  220. if (checkAvaliability(item.sizes)) {
  221. let id = item.id;
  222. let imageID = "style-"+id;
  223. image = document.getElementById(imageID).getElementsByClassName("style-thumb")[0];
  224. if (color.toLowerCase().includes(preferColor.toLowerCase()) || preferColor.toLowerCase() === 'any') {
  225. image.click();
  226. break;
  227. }
  228. }
  229. }
  230. if (image !== undefined) {
  231. image.click();
  232. }
  233. }
  234.  
  235. function checkAvaliability(sizes) {
  236. for (size of sizes) {
  237. if (size['stock_level'] > 0) {
  238. return true;
  239. }
  240. }
  241. return false;
  242. }
  243.  
  244. function chooseSize(){
  245. let sizeOpts = document.getElementsByTagName("option");
  246. let sizeVal = sizeOpts[0].value
  247. for (let option of sizeOpts){
  248. let size = option.text.toLowerCase();
  249. if (size === preferredSize.toLowerCase() || size === 'N/A'){
  250. sizeVal = option.value;
  251. break;
  252. }
  253. }
  254. sizeOpts = document.getElementsByTagName("select")[0].value = sizeVal;
  255.  
  256. }
  257.  
  258. function checkout(){
  259. window.location.href = 'https://www.supremenewyork.com/mobile/#checkout';
  260. let checkoutBtn = document.getElementById("submit_button");
  261. waitTillCheckoutPageIsOpen();
  262. }
  263.  
  264. async function waitTillCheckoutPageIsOpen() {
  265.  
  266. checkoutBtn = document.getElementById("submit_button");
  267. if (checkoutBtn) {
  268. notifyHeader.innerHTML = "正在填写个人信息。。。";
  269. await sleep(50);
  270. document.getElementById("order_billing_name").focus();
  271. document.getElementById("order_billing_name").value = billing_name;
  272.  
  273. await sleep(50);
  274. document.getElementById("order_email").focus();
  275. document.getElementById("order_email").value = order_email;
  276. await sleep(50);
  277. document.getElementById("order_tel").focus();
  278. document.getElementById("order_tel").value = order_tel;
  279. await sleep(50);
  280. document.getElementById("order_billing_address").focus();
  281. document.getElementById("order_billing_address").value = order_address;
  282.  
  283. if (document.getElementById("order_billing_address_2")) {
  284. await sleep(50);
  285. document.getElementById("order_billing_address_2").focus();
  286. document.getElementById("order_billing_address_2").value = order_billing_address_2;
  287. }
  288.  
  289.  
  290. if (document.getElementById("obz")) {
  291. await sleep(50);
  292. document.getElementById("obz").focus();
  293. document.getElementById("obz").value = order_billing_zip;
  294. }
  295. if (document.getElementById("order_billing_zip")) {
  296. await sleep(50);
  297. document.getElementById("order_billing_zip").focus();
  298. document.getElementById("order_billing_zip").value = order_billing_zip;
  299. }
  300. await sleep(50);
  301.  
  302. document.getElementById("order_billing_city").focus();
  303. document.getElementById("order_billing_city").value = order_billing_city;
  304.  
  305. if (document.getElementById("order_billing_country")) {
  306. await sleep(50);
  307. document.getElementById("order_billing_country").value = order_billing_country;
  308. document.getElementById("order_billing_country").dispatchEvent(event);
  309. }
  310.  
  311. if (document.getElementById("order_billing_state")) {
  312. await sleep(50);
  313. document.getElementById("order_billing_state").focus();
  314. document.getElementById("order_billing_state").value = order_billing_state;
  315. document.getElementById("order_billing_state").dispatchEvent(event);
  316. }
  317.  
  318. if (document.getElementById("credit_card_type")) {
  319. await sleep(50);
  320. document.getElementById("credit_card_type").value = credit_card_type;
  321. document.getElementById("credit_card_type").dispatchEvent(event);
  322. }
  323. if (document.getElementById("credit_card_n")) {
  324. await sleep(50);
  325. document.getElementById("credit_card_n").focus();
  326. document.getElementById("credit_card_n").value = cnb;
  327. }
  328. if (document.getElementById("credit_card_month")) {
  329. await sleep(50);
  330. document.getElementById("credit_card_month").focus();
  331. document.getElementById("credit_card_month").value = month;
  332. document.getElementById("credit_card_month").dispatchEvent(event);
  333. }
  334. if (document.getElementById("credit_card_year")) {
  335. await sleep(50);
  336. document.getElementById("credit_card_year").focus();
  337. document.getElementById("credit_card_year").value = year;
  338. document.getElementById("credit_card_year").dispatchEvent(event);
  339. }
  340. if (document.getElementById("cav")) {
  341. await sleep(50);
  342. document.getElementById("cav").focus();
  343. document.getElementById("cav").value = vval;
  344. }
  345. if (document.getElementById("credit_card_cvv")) {
  346. await sleep(50);
  347. document.getElementById("credit_card_cvv").focus();
  348. document.getElementById("credit_card_cvv").value = vval;
  349. }
  350.  
  351. await sleep(50);
  352. document.getElementById("order_terms").click();
  353.  
  354. notifyHeader.innerHTML = "填写完毕,请结账。。。";
  355. if (autoCheckout){
  356. notifyHeader.innerHTML = "自动结账中。。。";
  357. await sleep(checkout_delay);
  358. document.getElementById("hidden_cursor_capture").click();
  359. }
  360. console.log('paymentTime: ' + (new Date().getTime() - startTime) + ' ms');
  361. notifyHeader.remove();
  362. return;
  363. } else {
  364. setTimeout(async function(){ await waitTillCheckoutPageIsOpen(); }, 200);
  365. console.log("waiting to Chekcout...");
  366. }
  367. }
  368.  
  369. monitor()
  370. })()
  371.  
  372. completion()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement