All Projects → jpchip → Giveaway Grabber

jpchip / Giveaway Grabber

Licence: mit
Automated Amazon Giveaways using Node & Puppeteer (until 10/17/19) 🎁

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Giveaway Grabber

Pega Helm Charts
Orchestrate a Pega Platform™ deployment by using Docker, Kubernetes, and Helm to take advantage of Pega Platform Cloud Choice flexibility.
Stars: ✭ 58 (-22.67%)
Mutual labels:  amazon
Tib
Easy e2e browser testing in Node
Stars: ✭ 64 (-14.67%)
Mutual labels:  puppeteer
Sagemaker Debugger
Amazon SageMaker Debugger provides functionality to save tensors during training of machine learning jobs and analyze those tensors
Stars: ✭ 70 (-6.67%)
Mutual labels:  amazon
Mockiavelli
HTTP request mocking library for Puppeteer and Playwright
Stars: ✭ 60 (-20%)
Mutual labels:  puppeteer
Gogrocery
Its an eCommerce app inspired from Amazon , big Basket , grofers ,grocery app , Etc
Stars: ✭ 62 (-17.33%)
Mutual labels:  amazon
Page2image
📷 page2image is a npm package for taking screenshots which also provides CLI command
Stars: ✭ 66 (-12%)
Mutual labels:  puppeteer
Manageiq
ManageIQ Open-Source Management Platform
Stars: ✭ 1,089 (+1352%)
Mutual labels:  amazon
Puppeteer Container
A GitHub Action / Docker image for Puppeteer, the Headless Chrome Node API
Stars: ✭ 72 (-4%)
Mutual labels:  puppeteer
Aws Config To Elasticsearch
Generates an AWS Config Snapshot and ingests it into ElasticSearch for further analysis using Kibana
Stars: ✭ 62 (-17.33%)
Mutual labels:  amazon
Objstore
A Multi-Master Distributed Caching Layer for Amazon S3.
Stars: ✭ 69 (-8%)
Mutual labels:  amazon
Puppeteer Docs Zh Cn
Google Puppeteer 文档的中文版本 , 目标版本 1.9.0, 翻译中...
Stars: ✭ 61 (-18.67%)
Mutual labels:  puppeteer
Html to pdf
Generate a simple invoice PDF from HTML using puppeteer & handlebars
Stars: ✭ 62 (-17.33%)
Mutual labels:  puppeteer
Tracker Radar Collector
🕸 Modular, multithreaded, puppeteer-based crawler
Stars: ✭ 67 (-10.67%)
Mutual labels:  puppeteer
Angular Puppeteer Demo
A demonstration repository explains how to using Puppeteer in unit testing
Stars: ✭ 59 (-21.33%)
Mutual labels:  puppeteer
Amazon Payments Magento 2 Plugin
Extension to enable Amazon Pay on Magento 2
Stars: ✭ 69 (-8%)
Mutual labels:  amazon
Nuxt Jest Puppeteer
🚀 Nuxt.js zero configuration tests, run with Jest and Puppetter
Stars: ✭ 57 (-24%)
Mutual labels:  puppeteer
Broadway sqs
A Broadway producer for Amazon SQS
Stars: ✭ 64 (-14.67%)
Mutual labels:  amazon
Interview Process Coding Questions
Interview Coding Questions for Several Companies encapsulated into one Repository
Stars: ✭ 74 (-1.33%)
Mutual labels:  amazon
Fb Delete
Delete your Facebook content by year and category
Stars: ✭ 72 (-4%)
Mutual labels:  puppeteer
Kju
Kju — Improved waiting time for the adidas.com splash page ❯❯❯_
Stars: ✭ 68 (-9.33%)
Mutual labels:  puppeteer

npm version

giveaway-grabber 🎁

UPDATE: Amazon is shutting down Giveaways on 10/17/19
Thanks for everyone's support on this project, it was lots of fun while it lasted! Read more about the shutdown here: https://the-digital-reader.com/2019/09/27/amazon-is-shutting-down-amazon-giveaways-on-30-november/

This script will loop through all the Amazon giveaways and try to submit entries for them.

If there are things you really never want to win (like socks), you can add keywords to the blacklist in the config file and the script will always skip those entries.

I wanted a reason to experiment with Puppeteer, so here goes.

Note: Some video giveaways require using Chrome instead of Chromium, see chromeExecutablePath section below.

Installation

Prerequisites: Node.js (>=10.0.0), npm version 3+.

You can install giveaway-grabber using npm:

npm install -g giveaway-grabber

You should then set up a configuration file:

gg init

Follow the step by step instructions, which will create a .ggrc.json file in your current directory.

Usage

Run the script with:

gg

Note that the script will crash if the Chrome window is minimized! Check the console to monitor progress.

Other available commands:

Command Description
gg help Lists available commands and their descriptions.
gg --version Outputs gg CLI version.
gg --page=[number] Starts script on given page number (eg. gg --page=34)
gg --unfollow Starts the unfollow giveaway script to get rid of marketing emails (also works with gg unfollow)
gg --config=[string] Specify path to JSON config file (eg. gg --config=/var/myconfig.json)

If you would rather have the output write to a file then stdout, pipe it like:

gg > gg.log 2>&1

Configuration

After running gg init, you'll have a .ggrc.json file in your directory. It will look like this:

{
  "username": "[email protected]",
  "password": "123456",
  "2FA": false,
  "remember_me": false,
  "sendgrid_api_key": "",
  "sendgrid_cc": "",
  "blacklist": "floss,socks,ties",
  "chromeExecutablePath": "",
  "minimum_price": 0,
  "follow_giveaway": false,
  "unfollow_updates": false
}
Option Description
username Your Amazon Account Email Address
password Your Amazon Account Password
2FA Set true if you have two factor authentication enabled. Defaults to false.
remember_me Set true if you want to stay logged in between running scripts. Defaults to false.
sendgrid_api_key Your sendgrid API key, if you want to receive an email when you win. Optional
sendgrid_cc An email address to be cc'ed if you win
blacklist Comma delimited list of keywords to avoid when entering giveaways. Optional
chromeExecutablePath Path to your own install of Chrome. Optional
minimum_price Skip the giveaways with items with price lower than the minimum price. Optional
follow_giveaway Enter the follow type giveaways. Defaults to false
unfollow_updates Unfollow the Amazon updates after having followed the giveaways. Defaults to false

Two factor Authentication (2FA)

If you have two factor authentication enabled, set the 2FA option. The script will wait for you to enter your code.

If you set remember_me to true, you should only have to enter your two factor code the first time you start the script.

Blacklist

If there are types of giveaways you always want to skip, you can add a comma separated list of keywords to the blacklist.

Keywords are case insensitive.

The console will let you know when it skips giveaways that you marked as blacklisted like giveaway 5 is blacklisted [kindle edition].

Emails

If you want to receive an email notification on winning, sign up for a free sendgrid account and add the API key to your .ggrc.json file. Set sendgrid_cc to CC the winning email to another address.

chromeExecutablePath

You can point to an existing install of Chrome using chromeExecutablePath:

On Windows:

"chromeExecutablePath" : "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"

On MacOS:

"chromeExecutablePath" : "../../Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

This is required if you want to be able to enter all video giveaways. Chromium, which Puppeteer uses by default, does not support some of the video types used. The script will work fine without it, but it will only enter video giveaways with YouTube videos.

Follow Giveaways

You can decide to enter the giveaways that require you to Follow the brand. By default this is set to false and they will not be entered. It is possible that once followed, a brand will end up sending lots of promo emails.

Unfollow Updates

After entering the follow type giveaways you might experience more promotional emails from Amazon. Setting this option to true will automatically unfollow all updates right after the giveaways are entered. Alternatively, you can use the following commands to run a script to unfollow all promotional emails separately: gg --unfollow or gg unfollow

CAPTCHAs

Every so often Amazon will present a CAPTCHA. The script will attempt to enter it automatically, but if it fails, it will pause and wait for you to enter it. The console will warn you with an ENTER CAPTCHA! message, and you should get a system notification (only tested it on Windows 10).

Winning

If you are lucky enough to win, you should get a system notification and the url to the page will be logged like Winning Entry URL: https://amazon.com/ga/p/335...

If you set your sendgrid_api_key you'll also receive an email.

In addition, a wins.txt file is created in your current directory containing the winning url.

Good luck!

Database

Upon startup an SQLite3 database will be created in the application directory called gg.db.

A trimmed URL of the sweepstakes entry is stored along with a code that establishes what happened when the sweepstakes entry was attempted to be processed. The timestamp of when the sweepstakes code was received is stored. As Giveaway-Grabber iterates through the different sweepstakes entries available it will check the database. If Giveaway-Grabber finds that a code was registered for the URL then it will be skipped without actually going into the sweepstakes page. This will cut down on all the unnecessary hops into and out of sweepstakes entries when Giveaway-Grabber is restarted. There is a delay introduced so that pages aren't scrolled through in extremely rapid succession.

The table below outlines the codes used and what they are indicating.

Code Description
W The sweepstakes was won
L The sweepstakes was lost
E The sweepstakes has ended
M The sweepstakes was below minimum price
A The sweepstakes was already entered
C The sweepstakes cannot be entered

Codes relate to not being able to be processed are not stored. The expectation is that as Giveaway-Grabber matures these items may be corrected. As such, blocking them due to a failure would force Giveaway-Grabber to skip them after the problem is rectified.

NOTE: If you delete your giveaway-grabber's install directory, you may want to grab the gg.db file first. When a new Giveaway-Grabber is installed or cloned you can put the gg.db file into the install directory. This way you will be able to retain all of the sweepstakes you have previously entered. The gg.db file will rebuild on its own, but Giveaway-Grabber will need to go through each page to do so.

Development

Clone this repo, and you run the script locally with npm start. Note that options must be passed with an extra --, like:

npm start -- --page=34

You can run the tests with:

npm test

and lint the code with:

npm run lint

We love pull requests from everyone! See the Contributing Doc for more info.

Questions

If you have any questions, just open an issue.

Disclaimer

This project is not associated with Amazon in any way. I just created it for my own experimentation, so use at your own risk.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].