Greasy Fork is available in English.

Amazon Giveaway Bot - Ryan Montgomery

Automates Amazon giveaway entries

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// This is a Greasemonkey script and must be run using a Greasemonkey-compatible browser.
//
// ==UserScript==
// @name         Amazon Giveaway Bot - Ryan Montgomery
// @version      1.9.3
// @author       Ryan Montgomery
// @description  Automates Amazon giveaway entries
// @match        https://www.amazon.com/ga/*
// @match        https://www.amazon.com/ap/signin*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @run-at document-start
// @namespace https://greasyfork.org/users/230049
// ==/UserScript==



(function() {

    var mytemplate = {};

  	mytemplate["controls.html"] = "<div id=\"container\"\n" +
  		"	style=\"font-family: Roboto,\\'Helvetica Neue\\',Helvetica,Arial,sans-serif;font-size: 100%;padding: 5px; overflow: hidden; width: 400px; color: white; background-color: #232f3e; border-color: #232f3e; border-width: 2px; border-style: solid; z-index: 9999; text-align: center; display: flex; flex-direction: column; justify-content: center;\">\n" +
  		"	<h3 class=\"textColor\" style=\"padding-top: 0; margin-top: 0;\">Amazon Giveaway Automator</h3>\n" +
  		"\n" +
  		"		<div><span for=\"allowVideos\">Allow Videos: </span><input id=\"allowVideos\" name=\"allowVideos\" type=\"checkbox\"></input></div>\n" +
  		"		<div><label for=\"userEmail\">Enter your email address to receive an email when you win:</label><input id=\"userEmail\" name=\"userEmail\" type=\"text\" placeholdertype=\"Enter your email here\"></input><label>Follow me on instagram @0day</label></div>\n" +
  		"		<span id=\"numEntered\"></span>\n" +
  		"		<span id=\"currentSessionGiveawaysEntered\"></span>\n" +
  		"		<button id=\"run\">Start Automator (opens in new window)</button>\n" +
      "		<button id=\"disable\">Stop Automator</button>\n" +
  		"\n" +
  		"</div>\n" +
  		"";

    if(!GM_getValue("giveawaysEntered"))
      GM_setValue("giveawaysEntered", 0)
    if(!GM_getValue("userEmail"))
      GM_setValue("userEmail", "email")

    if(!GM_getValue("running")){

      var newHTML = document.createElement('div');
      newHTML.style.position = "absolute";
      newHTML.style.left = 'calc(50% - 200px)';
      newHTML.style.top = 150 + 'px';
      newHTML.style.zIndex = 9999;
      newHTML.innerHTML = mytemplate["controls.html"];
      document.body.appendChild(newHTML);
      document.getElementById("run").style.display = (GM_getValue("running") ? 'none' : 'block');
      document.getElementById("disable").style.display = (GM_getValue("running") ? 'block' : 'none');
      document.getElementById("currentSessionGiveawaysEntered").style.display = (GM_getValue("running") ? 'block' : 'none');
      document.getElementById("allowVideos").checked = GM_getValue("allowVideos");
      if(GM_getValue("userEmail")){
        document.getElementById("userEmail").value = GM_getValue("userEmail");
      }
      document.getElementById("numEntered").innerHTML = GM_getValue("giveawaysEntered") + ' Total Giveaways Entered';
      document.getElementById("currentSessionGiveawaysEntered").style.display = 'none'

      var automatorWindow

      document.getElementById("run").onclick = function () {
        GM_setValue("running", true)
        GM_setValue("processingGiveaways", false)
        GM_setValue("currentSessionGiveawaysEntered", 0)
        GM_setValue("currentIdx", 0)
        GM_setValue("mainPageUrl", window.location.href)
        if(document.getElementById("userEmail").value.includes("@"))
          GM_setValue("userEmail", document.getElementById("userEmail").value)
        GM_setValue("allowVideos", document.getElementById("allowVideos").checked)

        document.getElementById("run").style.display = 'none';
        document.getElementById("disable").style.display = 'block';
        document.getElementById("currentSessionGiveawaysEntered").style.display = 'block';
        automatorWindow = window.open(window.location.href, '_blank', 'height=500,width=500')
        setInterval(function() {
          document.getElementById("currentSessionGiveawaysEntered").innerHTML = GM_getValue("currentSessionGiveawaysEntered") + ' Giveaways Entered This Session';
          document.getElementById("numEntered").innerHTML = GM_getValue("giveawaysEntered") + ' Total Giveaways Entered';
          if(automatorWindow.closed && GM_getValue("running") ) {
            GM_setValue("running", false)
            GM_setValue("processingGiveaways", false)
            document.getElementById("currentSessionGiveawaysEntered").style.display = 'none';
            document.getElementById("disable").style.display = 'none';
            document.getElementById("run").style.display = 'block';
          }
        }, 1000);
        window.addEventListener('unload', () => {
          if(!automatorWindow.closed)
            automatorWindow.close()
          GM_setValue("running", false)
          GM_setValue("processingGiveaways", false)
        }, false);
      }

      document.getElementById("disable").onclick = function () {
        GM_setValue("running", false)
        GM_setValue("processGiveaways", false)
        document.getElementById("currentSessionGiveawaysEntered").style.display = 'none';
        document.getElementById("disable").style.display = 'none';
        document.getElementById("run").style.display = 'block';
        automatorWindow.close()
      }
    }

      // run script on page load
    window.addEventListener('DOMContentLoaded', main, false);


    var isSignIn = window.location.href.includes("https://www.amazon.com/ap/signin")
    var isMainPage = window.location.href.includes("https://www.amazon.com/ga/giveaways")
    var isGiveaway = window.location.href.indexOf('ga/p') !== -1;
  // var isSignInpwd = window.location.href.includes("https://www.amazon.com/ap/signin")

    function getGiveaways() {
      var giveawayItems = document.querySelectorAll(".giveawayItemContainer a");
      giveawayItems.forEach((item, idx) => {
        GM_setValue(`giveaway-${idx}`, JSON.stringify(item.href))
      })
      processGiveaways()
    }

    async function processGiveaways() {
      GM_setValue("processingGiveaways", true)
      let idx = GM_getValue("currentIdx");
      let currentGiveaway = JSON.parse(GM_getValue(`giveaway-${idx}`))
      GM_setValue(`giveaway-${idx}`, false)
      idx += 1
      GM_setValue("currentIdx", idx)
      if(idx <= 23){
        window.location.href = currentGiveaway;
      } else {
        window.location.href = GM_getValue("mainPageUrl")
      }
    }

    async function enterGiveaway(){
      let numEntered = GM_getValue("giveawaysEntered")
      numEntered += 1
      GM_setValue("giveawaysEntered", numEntered)
      numEntered = GM_getValue("currentSessionGiveawaysEntered")
      numEntered += 1
      GM_setValue("currentSessionGiveawaysEntered", numEntered)

      setInterval( () => {
        // if giveaway has video requirement, click the continiue entry button first
        if((document.getElementById("giveaway-video-watch-text") || (document.getElementById("giveaway-youtube-video-watch-text") && !document.querySelector(".continue_button_inner").disabled))){
          if(GM_getValue("allowVideos")){
            document.querySelector(".continue_button_inner").click();
            handleSubmit()
          }
          else {
            processGiveaways()
          }
        }
        // don't enter givaways with follow requirements or contains a kindle e-book
        else if (document.getElementById('en_fo_follow-announce') || (document.getElementById("giveaway-prize-container").innerText.includes('Kindle'))) {
          processGiveaways()
        }
        // otherwise, enter giveaway immediately
        else {
            if(document.querySelector("#ts_en_enter")){
              document.querySelector("#ts_en_enter span input").click()
              handleSubmit();
            }
            if(document.querySelector(".boxClickTarget")){
              document.querySelector(".boxClickTarget").click()
              handleSubmit();
            }
        }
      }, 1000)
    }

    // check page until results show up then continue to next giveaway in queue if not a winner
    function handleSubmit(){
      let emailed = false
      setInterval(() => {
        if(document.getElementById('title')){
          if(document.getElementById('title').innerHTML.includes('won')){
            // setInterval( () => GM_notification("You just won an Amazon giveaway!", "Amazon Giveway Automator"), 5000)
            if(!emailed){
              emailed = true
              GM_xmlhttpRequest({
                method: "POST",
                url: "http://email-sender-213012.appspot.com/hello",
                data: `email=${GM_getValue("userEmail")}&href=${window.location.href}`,
                headers: {
                  "Content-Type": "application/x-www-form-urlencoded"
                },
              });
            }
            document.getElementById('lu_co_ship_box-announce').click()
            processGiveaways()
            return
          } else {
            processGiveaways()
            return
          }
          return
        }
      }, 1000)
    }

    function main() {
      if(GM_getValue("running")){
        if(isSignIn){
          setInterval(() => {document.querySelector(".a-row.a-color-base").click()}, 1000)
        }
     // if(isSignInpwd){
       //   setInterval(() => {document.querySelector("#signInSubmit").click()}, 1200)
         //     }

        if(isMainPage){
          GM_setValue("mainPageUrl", window.location.href)
          if(GM_getValue("currentIdx") > 23){
            GM_setValue("processingGiveaways", false)
            GM_setValue("currentIdx", 0)
            document.querySelector(".a-last a").click()
          } else if(!GM_getValue("processingGiveaways")){
            getGiveaways();
          } else {
            processGiveaways();
          }
        }

        if(isGiveaway){
          // if giveaway has already been entered, continue on to next giveaway in queue
          if(document.querySelector("#giveaway-ended-header") || (document.getElementById('title') && !document.getElementById('title').innerText.includes('confirmation'))){
            processGiveaways()
          }
          // if giveaway has follow requirement or is having an error, don't enter
          else if(document.getElementById("ts_en_fo_follow-announce") || (document.querySelector("#giveaway-digital-eni-alert"))){
            processGiveaways()
          }
          // handle giveaways with video requirement
          else if (document.getElementById("giveaway-youtube-video-watch-text") || document.getElementById("giveaway-video-watch-text")){
            if(GM_getValue("allowVideos")){
              window.addEventListener('load', () => {
                if(document.querySelector(".continue_button_inner")){
                  if(document.querySelector(".airy-play-toggle-hint.airy-hint.airy-play-hint")){
                    document.querySelector(".airy-play-toggle-hint.airy-hint.airy-play-hint").click()
                  }
                  setTimeout(enterGiveaway, 16000)
                }
              }, false);
            }
            else {
              processGiveaways()
            }
          }
          // if giveaway has no requirements, enter it
          else{
            enterGiveaway()
          }
        }
      }
    }

})();