From 32768fa74ed1eb586bb0aff3855a295fc6e0d7a7 Mon Sep 17 00:00:00 2001 From: malbert69 Date: Thu, 17 Sep 2020 19:31:32 -0500 Subject: [PATCH] Create cardbot.js (#1) --- cardbot.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 cardbot.js diff --git a/cardbot.js b/cardbot.js new file mode 100644 index 0000000..5fe036a --- /dev/null +++ b/cardbot.js @@ -0,0 +1,59 @@ +// brought to you by @jef and @malbert69 +// npm i puppeteer opn +// node index.js +// feel free to add more nvidia links to the `links` variable +// @malbert69 added Best Buy link and code that modifies USER-AGENT header to spoof a real browser... + +const puppeteer = require("puppeteer") +const opn = require("opn") + +const timeout = 3000; + +async function buy() { + const links = [ + { name: "nvidia.com", url: "https://www.nvidia.com/en-us/geforce/buy/", oosText: "out of stock" }, + { name: "nvidia.com 2", url: "https://www.nvidia.com/en-us/shop/geforce/?page=1&limit=9&locale=en-us&search=3080", oosText: "out of stock" }, + { name: "bestbuy.com", url: "https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440", oosText: "sold out" } + ] + for (const link of links) { + await goto(link) + } + + setTimeout(buy, timeout); +} + +async function goto(link) { + const browser = await puppeteer.launch() + const page = await browser.newPage() + + await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'); + + page.setViewport({ + width: 1920, + height: 1080 + }); + + await page.goto(link.url) + await page.waitForTimeout(1000); + + const dom = await page.evaluate(() => { + return { + body: document.body.innerText, + } + }) + + console.log(dom) + + if (dom.body.toLowerCase().includes("out of stock") || dom.body.toLowerCase().includes(link.oosText.toLowerCase()) ) { + console.log(link.name + " is still out of stock... Attempting next link.") + } else { + console.log("*** IN STOCK AT " + link.name.toUpperCase() + " , BUY NOW ***") + opn(link) + } + + await page.screenshot({ path: `nvidia-${Date.now()}.png` }) + + await browser.close() +} + +buy().then()