Bij dezen wil ik graag mijn script delen om een videokaart mee te bestellen op AMD.com. Ik heb gister een 6800XT Midnight Black edition weten te scoren met een vergelijkbaar script (maar die had nog wat eigenschappen die delen niet zo'n goed plan maakten). Dit was eigenlijk de eerste keer dat ik het script echt probeerde, maar het kan natuurlijk zo dat ik gewoon geluk heb gehad. (Ik kreeg ook geen moeilijke CAPTCHA en dat helpt natuurlijk ook.)
Ik zal geen uitgebreide support leveren en er zijn natuurlijk geen garanties, maar misschien helpt het een gamer om een kaart te kopen.
Helaas werkt dit script echter niet zolang je een CAPTCHA moet doen om een product aan de winkelwagen toe te voegen...
2. Vervang in de bovenstaande code <product id> met de genoteerde id.
3. Ga naar https://www.amd.com/en/direct-buy/nl, druk op F12 om de console te openen, plak de code in de console, en druk op enter.
4. Als je Firefox gebruikt, houd deze tab dan actief. Als de tab (of het venster) in de achtergrond draait dan faalt hij om onbekende redenen. Deze beperking is niet van toepassing als je Chrome gebruikt.
Na het refreshen, kijkt hij of er voor het product dat je hebt aangegeven een knop is om het product mee aan je mandje toe te voegen. Als dit zo is, dan speelt het een geluidje af, wacht een seconde en laad dan de pagina opnieuw (maar dit keer op zo'n manier dat het script stopt met werken!). Daarna moet je zelf de kaart aan je mandje toevoegen en door gaan naar het bestellen.
Als het script het merkt dat het niet bij de inhoud van de iframe kan, dan speelt het een ander geluidje af. Er zijn hier twee bekende redenen voor. Dit gebeurd namelijk als je in Firefox in de achtergrond draait, en als je een cookieban of ip-ban hebt ontvangen. Als je dus geen firefox gebruikt of de tab netjes in de voorgrond hebt gehouden, kijk dan of hij het weer doet als je je cookies weggooit.
Dit alles doet het in een iframe, zodat het script geladen blijft terwijl de pagina opnieuw wordt geladen. Deze iframe wordt wel over de originele pagina neergezet, waardoor je alleen de iframe nog maar ziet. Dit is ook waarom je zult zien dat er een dubbele scrollbar is (deze had ik weg kunnen halen, maar ik vond het eigenlijk wel grappig en niet de moeite waard om weg te halen).
v2: andere geluiden (ik had per ongeluk de veerkeerde urls er in laten staan)
v3: werkt nu ook op (bijvoorbeeld) de Duitse site
v4: error geluidje werkt nu in geval van cookieban en firefox in achtergrond (huidige versie)
2. Vervang in de bovenstaande code <product id> met de genoteerde id.
3. Ga naar https://www.amd.com/en/direct-buy/nl, druk op F12 om de console te openen, plak de code in de console, en druk op enter.
Als het is gelukt om het product aan je mandje toe te voegen, dan speelt het een geluidje af, wacht een seconde op het geluidje en laad daarna de afrekenpagina. Daarna sta je er zelf voor om het afrekenproces af te maken!
Als het script het merkt dat er iets fout gaat, dan speelt het een ander geluidje af. De kans is dan groot dat het probleem is dat je je cookies moet verwijderen. Dit is alleen het geval als je de "403" krijgt. Ik heb in mijn testen ook gemerkt dat hij soms gewoon zei dat het product uitverkocht was door een cookieban, maar dat heeft het script niet door.
v2: extra logging zodat je kunt zien dat hij het doet (huidige versie)
Het scripts zijn "quick and dirty" geschreven met het idee dat het een keer moest werken en dat was genoeg. Dit betekent bijvoorbeeld dat het niet tegen een kleine wijziging in het response-formaat van amd.com kan. Het kan natuurlijk beter, en als je deze verbetering wilt maken mag je dat natuurlijk doen en je code hier delen.
Doordat ik mijn script hier plaats kunnen scalpers het natuurlijk ook gebruiken. Echter, de serieuze scalpers verdienen goed geld, en met een relatief kleine investering kunnen ze al een veel beter script dan deze krijgen.
Dit waren de product ids op een moment in het verleden volgens iemand. Zelf ben ik meer een voorstander van zelf kijken naar de url van de detailpagina, maar je kunt natuurlijk ook hier kijken (maar er is geen garantie dat deze ids nog kloppen):
6900xt = 5458374200
6800xt = 5458374100
6800 = 5458374000
6700xt = 5496921400
Ik zal geen uitgebreide support leveren en er zijn natuurlijk geen garanties, maar misschien helpt het een gamer om een kaart te kopen.
Twee scripts?
Er staan hieronder twee scripts: eentje die gebruikt maakt van een iframe en eentje die gebruik maakt van een XHR call. De versie met de XHR call is duidelijk beter. Echter, op het moment moet je een CAPTCHA invullen om een product aan je winkelmandje toe te voegen, en dat zorgt er voor dat dit script simpelweg niet werkt.Eigenschappen Iframe script
Dit script doet in feite het refreshen en kijken of er een knop is om het product aan je winkelwagentje toe te voegen voor je. Het is niet bij een drop getest, en hoewel het een poging doet om te zorgen dat de knop onzichtbaar is door caching, kan ik niet met zekerheid zeggen dat dit ook lukt.Eigenschappen XHR call script
Dit script doet in feite het klikken op de "add to cart" knop voor je, en kijkt dan of dit het gewenste resultaat heeft gehad. Het kan zelfs op de knop "klikken" wanneer de knop nog niet zichtbaar is. Ik heb hier zelf een kaart mee besteld, in dit topic zijn er nog 4 mensen die hebben aangegeven een kaart te kunnen bestellen, en 3 die bij het bestellen kwamen, maar problemen hadden met de betaling. Er is nog helemaal niemand die heeft aangegeven dat er geen product aan de winkelwagen is toegevoegd tijdens de drop.Helaas werkt dit script echter niet zolang je een CAPTCHA moet doen om een product aan de winkelwagen toe te voegen...
Iframe Script
code:
1
| let productId = '<product id>';let notSnd = new Audio("https://mobcup.net/d/uuq1odwo/mp3");function notificationSound() {notSnd.play();}let errSnd = new Audio("https://mobcup.net/d/iqjowaoh/mp3");function errorSound() {errSnd.play();}let now = new Date();let seconds = (3 - now.getSeconds() + 60) % 60;jQuery('<iframe id="card-orderer"></iframe>').appendTo("body");jQuery('#card-orderer').attr('src', window.location.href);jQuery('#card-orderer').css('width', '100%');jQuery('#card-orderer').css('height', '100%');jQuery('#card-orderer').css('position', 'fixed');jQuery('#card-orderer').css('top', '0');jQuery('#card-orderer').css('left', '0');document.getElementById('card-orderer').onload = () => {try {let idoc = document.getElementById('card-orderer').contentWindow.document;let block = jQuery(idoc).find('.shop-content').has('a[href*="direct-buy/' + productId + '"]');let title = jQuery(idoc).find('h1.page-title');if (block.find('.btn-shopping-cart').length > 0){console.log("Card Orderer Iframe: Add to cart button found");notificationSound();window.setTimeout(() => {window.location.reload();}, 1000);}else if (title.length < 1) {console.log("Card Orderer Iframe: Problem loading page");errorSound();}else {console.log("Card Orderer Iframe: Add to cart button not found");}}catch (DomException) {console.log("Card Orderer Iframe: Problem accessing iframe");errorSound();}};document.getElementById('card-orderer').onerror = () => {errorSound();};console.log("Card Orderer Iframe: Waiting for the right moment...");window.setTimeout(() => {console.log("Card Orderer Iframe: Found the right moment");window.setInterval(() => {console.log("Card Orderer Iframe: reloading page");document.getElementById('card-orderer').contentWindow.location = window.location + '?anticache=' + Math.random();}, 30 * 1000);}, seconds * 1000); |
Gebruiksaanwijzing
1. Ga naar de detailpagina van het product en noteer de id uit de url. De url heeft de vorm "https://www.amd.com/en/direct-buy/<product id>/nl"2. Vervang in de bovenstaande code <product id> met de genoteerde id.
3. Ga naar https://www.amd.com/en/direct-buy/nl, druk op F12 om de console te openen, plak de code in de console, en druk op enter.
4. Als je Firefox gebruikt, houd deze tab dan actief. Als de tab (of het venster) in de achtergrond draait dan faalt hij om onbekende redenen. Deze beperking is niet van toepassing als je Chrome gebruikt.
Wat doet de code
Het script wacht eerst tot het 3 seconden na een minuut is, en refresht dan elke halve minuut de pagina. Hier gaat het mee door zolang je zelf de pagina niet ververst en niet naar een andere pagina navigeert.Na het refreshen, kijkt hij of er voor het product dat je hebt aangegeven een knop is om het product mee aan je mandje toe te voegen. Als dit zo is, dan speelt het een geluidje af, wacht een seconde en laad dan de pagina opnieuw (maar dit keer op zo'n manier dat het script stopt met werken!). Daarna moet je zelf de kaart aan je mandje toevoegen en door gaan naar het bestellen.
Als het script het merkt dat het niet bij de inhoud van de iframe kan, dan speelt het een ander geluidje af. Er zijn hier twee bekende redenen voor. Dit gebeurd namelijk als je in Firefox in de achtergrond draait, en als je een cookieban of ip-ban hebt ontvangen. Als je dus geen firefox gebruikt of de tab netjes in de voorgrond hebt gehouden, kijk dan of hij het weer doet als je je cookies weggooit.
Dit alles doet het in een iframe, zodat het script geladen blijft terwijl de pagina opnieuw wordt geladen. Deze iframe wordt wel over de originele pagina neergezet, waardoor je alleen de iframe nog maar ziet. Dit is ook waarom je zult zien dat er een dubbele scrollbar is (deze had ik weg kunnen halen, maar ik vond het eigenlijk wel grappig en niet de moeite waard om weg te halen).
Versiegeschiedenis
v1: eerste versiev2: andere geluiden (ik had per ongeluk de veerkeerde urls er in laten staan)
v3: werkt nu ook op (bijvoorbeeld) de Duitse site
v4: error geluidje werkt nu in geval van cookieban en firefox in achtergrond (huidige versie)
XHR Call Script
code:
1
| let productId = '<product id>'; let notSnd = new Audio("https://mobcup.net/d/uuq1odwo/mp3");function notificationSound() {notSnd.play();}let errSnd = new Audio("https://mobcup.net/d/iqjowaoh/mp3");function errorSound() {errSnd.play();}console.log("Card-orderer: Waiting for the right moment...");let now = new Date();let seconds = (3 - now.getSeconds() + 60) % 60;window.setTimeout(() => {console.log("Card-orderer: Found the right moment.");window.setInterval(() => {console.log("Card-orderer: Trying to add card to cart.");jQuery.get('/en/direct-buy/add-to-cart/' + productId).then((response) => {if (response[4].command == "announce" && response[4].text == "Product added to cart."){console.log("Card-orderer: Card added to cart.");notificationSound();let regex = /\/en\/direct-buy\/checkout\/payment\/[0-9]+\/nl/;let cartUrl = response[7].data.match(regex)[0];window.setTimeout(() => {window.location.href = cartUrl;}, 1000);}else{console.log("Card-orderer: Couldn't add card to cart.");}}).catch(() => {console.log("Card-orderer: Error while trying to add card to cart.");errorSound();});}, 30 * 1000);}, seconds * 1000); |
Gebruiksaanwijzing
1. Ga naar de detailpagina van het product en noteer de id uit de url. De url heeft de vorm "https://www.amd.com/en/direct-buy/<product id>/nl"2. Vervang in de bovenstaande code <product id> met de genoteerde id.
3. Ga naar https://www.amd.com/en/direct-buy/nl, druk op F12 om de console te openen, plak de code in de console, en druk op enter.
Wat doet de code
Het script wacht eerst tot het 3 seconden na een minuut is, en probeert dan elke halve minuut om het product aan je mandje toe te voegen. Hier gaat het mee door zolang je de pagina niet ververst en niet naar een andere pagina navigeert.Als het is gelukt om het product aan je mandje toe te voegen, dan speelt het een geluidje af, wacht een seconde op het geluidje en laad daarna de afrekenpagina. Daarna sta je er zelf voor om het afrekenproces af te maken!
Als het script het merkt dat er iets fout gaat, dan speelt het een ander geluidje af. De kans is dan groot dat het probleem is dat je je cookies moet verwijderen. Dit is alleen het geval als je de "403" krijgt. Ik heb in mijn testen ook gemerkt dat hij soms gewoon zei dat het product uitverkocht was door een cookieban, maar dat heeft het script niet door.
Versiegeschiedenis
v1: eerste versiev2: extra logging zodat je kunt zien dat hij het doet (huidige versie)
Voetnoten
Bij mijn bestelling deed het geluidje het niet, maar ik zag zelf dat de bestelpagina werd geladen. Ik heb een verbetering gemaakt waardoor ik denk dat het nu wel zou moeten afspelen voordat de nieuwe pagina wordt geladen, maar er zelf ook een oog op houden kan nooit kwaad. Ook is het voor het geluid nodig om auto-play van geluiden toe te staan in je browser.Het scripts zijn "quick and dirty" geschreven met het idee dat het een keer moest werken en dat was genoeg. Dit betekent bijvoorbeeld dat het niet tegen een kleine wijziging in het response-formaat van amd.com kan. Het kan natuurlijk beter, en als je deze verbetering wilt maken mag je dat natuurlijk doen en je code hier delen.
Doordat ik mijn script hier plaats kunnen scalpers het natuurlijk ook gebruiken. Echter, de serieuze scalpers verdienen goed geld, en met een relatief kleine investering kunnen ze al een veel beter script dan deze krijgen.
Dit waren de product ids op een moment in het verleden volgens iemand. Zelf ben ik meer een voorstander van zelf kijken naar de url van de detailpagina, maar je kunt natuurlijk ook hier kijken (maar er is geen garantie dat deze ids nog kloppen):
6900xt = 5458374200
6800xt = 5458374100
6800 = 5458374000
6700xt = 5496921400
[ Voor 83% gewijzigd door GreatMagicalHat op 15-04-2021 18:57 ]